书签 分享 收藏 举报 版权申诉 / 106
上传文档赚钱

类型最新汇编语言第4章顺序程序设计课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4968790
  • 上传时间:2023-01-29
  • 格式:PPT
  • 页数:106
  • 大小:1.63MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《最新汇编语言第4章顺序程序设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    最新 汇编语言 顺序 程序设计 课件
    资源描述:

    1、DATA SEGMENT ;数据段定义伪指令;数据段定义伪指令X DW 4 ;定义;定义X为字单元,值为为字单元,值为4Y DW 5Z DW?;定义;定义Z为空单元为空单元DATA ENDS ;数据段结束;数据段结束 完整的程序如下:完整的程序如下:;abc.asm 公式计算公式计算CODE SEGMENT ;代码段定义伪指令;代码段定义伪指令 ASSUME CS:CODE,DS:DATA ;指定段寄存器与对应段名;指定段寄存器与对应段名START:MOV AX,DATA MOV DS,AX ;将数据段段地址送入;将数据段段地址送入DSMOV BX,X MOV AX,YADD AX,BX ;加

    2、法;加法MOV CL,3SAL AX,CL ;算术左移;算术左移3次,相当于乘以次,相当于乘以8SUB AX,X ;减法;减法SAR AX,1 ;算术右移;算术右移1次,相当于除以次,相当于除以2MOV Z,AXMOV AH,4CH ;此两句为结束程序,返回;此两句为结束程序,返回DOSINT 21H CODE ENDS ;代码段结束;代码段结束 END START ;整个程序结束伪指令;整个程序结束伪指令4.1.2 从源程序到可执行程序从源程序到可执行程序 图图 汇编语言程序从输入到生成可执行文件过程汇编语言程序从输入到生成可执行文件过程1建立和生成的文件建立和生成的文件2汇编环境汇编环境3

    3、上机步骤上机步骤4调试程序调试程序 1建立和生成的文件建立和生成的文件(1)用户编写的源程序,源程序名自)用户编写的源程序,源程序名自定、扩展名为定、扩展名为.ASM(2)源程序经汇编程序)源程序经汇编程序MASM汇编汇编(翻译)后生成二进制目标程序,文(翻译)后生成二进制目标程序,文件 名 默 认 与 源 程 序 同 名、扩 展 名件 名 默 认 与 源 程 序 同 名、扩 展 名为为.OBJ(3)目标程序需要经过)目标程序需要经过LINK连接生连接生成可执行程序,文件名默认与源程序成可执行程序,文件名默认与源程序同名、扩展名为同名、扩展名为.EXE 2汇编环境汇编环境 最基本的汇编环境只需

    4、要两个文件:最基本的汇编环境只需要两个文件:MASM.EXE和和LINK.EXE。将这两。将这两个文件拷入到已经建好的文件夹(例个文件拷入到已经建好的文件夹(例如如HB)中,并将文件夹)中,并将文件夹HB放在硬盘放在硬盘根目录根目录C:下下 文本编辑软件可以用文本编辑软件可以用EDIT或者或者“记记事本事本”3上机步骤上机步骤 Ccd 退到根目录退到根目录Ccd hb 进入进入hb子目录子目录C:hbedit abc.asm 编辑源程序编辑源程序C:hb masm abc.asm 汇编汇编C:hb link abc.obj 连接连接C:hb abc.exe 执行执行C:hb debug abc

    5、.exe 调试调试 进入进入DOS窗口中执行:窗口中执行:4调试程序调试程序-U 反汇编反汇编-G 断点断点 执行程序执行程序-D DS:0 查看数据段查看数据段-Q 退出退出进入进入DEBUG后,执行如下命令:后,执行如下命令:上机练习:上机练习:(1)验证举例的设计思路二程序)验证举例的设计思路二程序(2)将举例的设计思路一的程序段)将举例的设计思路一的程序段增加相关的伪指令,修改为可上机执增加相关的伪指令,修改为可上机执行的程序。行的程序。4.2 伪指令伪指令4.2.1段定义伪操作段定义伪操作n段定义伪指令段定义伪指令nASSUME伪指令伪指令段定义伪指令段定义伪指令 段定义伪指令可用来

    6、定义各种类型的段。段定义伪指令可用来定义各种类型的段。格式如下:格式如下:段名段名 SEGMENT 类型参数类型参数 段名段名 ENDSSEGMENT和和ENDS必须成对使用,表示段的必须成对使用,表示段的开始和结束。开始和结束。类型参数:类型参数:(1)定位类型)定位类型PARA 该段的起始地址必须为小段的首地址,即段该段的起始地址必须为小段的首地址,即段地址的十六进制数最低位为地址的十六进制数最低位为0BYTE 该段可以从任意地址开始该段可以从任意地址开始WORD 该段必须从字边界开始,即段的起始地址为该段必须从字边界开始,即段的起始地址为偶数偶数DWORD 该段必须从双字边界开始,即段地

    7、址的十六该段必须从双字边界开始,即段地址的十六进制数最低位应为进制数最低位应为4的倍数的倍数PAGE 该段必须从页边界开始,即段地址的十六进该段必须从页边界开始,即段地址的十六进制数最低两位为制数最低两位为00(能被(能被256整除)整除)如果不指出定位类型,系统默认为如果不指出定位类型,系统默认为PARA。(2)组合类型)组合类型PRIVATE 该段为私有段,连接时不与其他同名段合并该段为私有段,连接时不与其他同名段合并PUBLIC 连接时可与其他模块中的同名段按顺序连接连接时可与其他模块中的同名段按顺序连接 成一个段成一个段COMMON 表示该段与其他模块中的同名段有相同的起表示该段与其他

    8、模块中的同名段有相同的起 始地址,如果连接将产生覆盖;连接后,始地址,如果连接将产生覆盖;连接后,段的长度为同名段中的最长者段的长度为同名段中的最长者STACK 表示该段为堆栈段表示该段为堆栈段AT 表达式表达式 该段直接定位在表达式指出的位置上该段直接定位在表达式指出的位置上如果不指定组合类型,系统默认为如果不指定组合类型,系统默认为PRIVATE。(3)类别标识)类别标识在引号中给出段的类型名,在连接时,类别标识相同的在引号中给出段的类型名,在连接时,类别标识相同的段放在连续的存储区中。段放在连续的存储区中。例如,用例如,用STACK来标识该段为堆栈段来标识该段为堆栈段 返回返回ASSUM

    9、E伪指令伪指令 ASSUME伪指令用于指明段寄存器与段伪指令用于指明段寄存器与段的对应关系,格式为:的对应关系,格式为:ASSUME 段寄存器:段名,段寄存器:段名,段寄存器:段寄存器:段名,段名,如果不使用如果不使用ASSUME伪指令,系统就无法获伪指令,系统就无法获知用户定义的段都有哪些,进而就不能正确知用户定义的段都有哪些,进而就不能正确地划分段。地划分段。返回返回数据定义伪指令格式为:数据定义伪指令格式为:存储单元名存储单元名 DB(或(或DW、DD等伪指令)等伪指令)操作数操作数其中:其中:(1)存储单元可以起名也可以不要名字)存储单元可以起名也可以不要名字(2)数据定义伪指令)数据

    10、定义伪指令DB 定义字节单元定义字节单元DW 定义字单元定义字单元DD 定义双字单元定义双字单元DQ 定义四字单元定义四字单元DT 定义十字节单元定义十字节单元(3)操作数用于指出存储单元的内容即该单元的值。)操作数用于指出存储单元的内容即该单元的值。一条数据定义伪指令可以给多个存储单元赋值。一条数据定义伪指令可以给多个存储单元赋值。需要说明的是确定存储单元的内容时要与存储单需要说明的是确定存储单元的内容时要与存储单元的属性一致。元的属性一致。4.2.2 数据定义伪指令数据定义伪指令 操作数是常数或表达式操作数是常数或表达式 例例1 定义字节单元定义字节单元X=56,字单元,字单元E_1=20

    11、30H,双字,双字单元单元CARRY=12345678H DATA SEGMENT X DB 56 E_1 DW 2030H CARRY DD 12345678H DATA ENDS实际存储显示:实际存储显示:例例2 一次定义多个存储单元。字母打头的十一次定义多个存储单元。字母打头的十六进制数要在前面加六进制数要在前面加0,?代表空单元,?代表空单元 XX DB 12,0,0E4H YY DW 5,?,?,6*3实际存储显示:实际存储显示:例例3 用用DUP()子句重复定义相同操作数子句重复定义相同操作数 AVE DB 8,3 DUP(2),-6MSN DB 5 DUP(?)COUNT DW

    12、100 DUP(1)存储示意:存储示意:操作数是字符串操作数是字符串 例例1 定义字符及字符串,字符串要用引号括起来定义字符及字符串,字符串要用引号括起来 MES1 DB A,B MES2 DW AB MES3 DB HELLO 实际存储显示实际存储显示:4.2.3 其它伪指令其它伪指令1赋值伪指令赋值伪指令 在程序中多次出现同一个表达式时,可以用在程序中多次出现同一个表达式时,可以用EQU定义一个符号来代表表达式,以简化书写。定义一个符号来代表表达式,以简化书写。与与EQU伪操作相似,等号伪操作相似,等号=伪操作也可以给表伪操作也可以给表达式赋值,且允许对一个符号多次重复定义;达式赋值,且允

    13、许对一个符号多次重复定义;而而EQU则不允许。则不允许。例:例:CONT EQU 125*3.14 STR EQU RIGHT SUM EQU 0 BUFF=56 PASS=2034H BUFF=56H2模块定义伪指令模块定义伪指令 在汇编语言中,可以将程序设为多个模块,每在汇编语言中,可以将程序设为多个模块,每个模块完成独立的功能。因此,每个模块可用模个模块完成独立的功能。因此,每个模块可用模块定义伪指令定义名称和结束标识。格式为:块定义伪指令定义名称和结束标识。格式为:NAME 模块名模块名 END 起始标号起始标号其中,其中,NAME伪指令可以缺省。如果缺省,则伪指令可以缺省。如果缺省,

    14、则以该模块的源程序名作为模块名。以该模块的源程序名作为模块名。END伪指令不能缺省。其后的起始标号可伪指令不能缺省。其后的起始标号可以是程序的第一条汇编指令的标号以是程序的第一条汇编指令的标号START,或者是主过程名。或者是主过程名。3地址计数器地址计数器 地址计数器地址计数器$表示当前的偏移地址值。表示当前的偏移地址值。如果用在数据段的存储单元定义中,可写成:如果用在数据段的存储单元定义中,可写成:ABC DW 1,2,$+3,4实际存储显示:实际存储显示:如果用在转移指令中:如果用在转移指令中:JMP$+5则无条件跳转到当前指令的偏移地址则无条件跳转到当前指令的偏移地址+5单元继单元继续

    15、执行。续执行。4设置偏移地址伪指令设置偏移地址伪指令当前的偏移地址可以用当前的偏移地址可以用ORG伪指令定义。伪指令定义。如果用在数据段中,该指令可以确定存储单元的偏移如果用在数据段中,该指令可以确定存储单元的偏移地址,例如将地址,例如将X单元的偏移地址定义为单元的偏移地址定义为0020H,该单,该单元的内容为元的内容为5,即,即(DS:0020H)=5。伪指令如下:。伪指令如下:DATA SEGMENT ORG 0020H X DW 5DATA ENDS如果用在代码段中,可从指定的单元开始存放并执行如果用在代码段中,可从指定的单元开始存放并执行指令。指令。例如从代码段的例如从代码段的100H

    16、开始执行:开始执行:ORG 100HSTART:MOV AX,X;标号;标号START设置为设置为100H MOV BX,Y ADD AX,BX5操作符操作符在汇编指令中可以使用一些操作符,汇编程序编译时将在汇编指令中可以使用一些操作符,汇编程序编译时将这些操作符变为相应的数值回送或者定义属性。这些操作符变为相应的数值回送或者定义属性。(1)回送偏移地址值)回送偏移地址值OFFSETMOV BX,OFFSET X ;将;将X单元的偏移地址传送给单元的偏移地址传送给BXMOV AX,OFFSET START ;将标号;将标号START的偏移地址传送给的偏移地址传送给AX(2)回送段地址值)回送段

    17、地址值SEGMOV BX,SEG X ;将;将X单元的段地址传送给单元的段地址传送给BXMOV AX,SEG START ;将标号;将标号START的段地址传送给的段地址传送给AX(3)类型回送操作符)类型回送操作符TYPEMOV BX,TYPE X ;如果;如果X是字节单元,则回送值为是字节单元,则回送值为1,即,即 BX1;若是字单元,值为若是字单元,值为2,双字单元,值为,双字单元,值为4(4)属性操作符)属性操作符PTRMOV BYTE PTR BX,10 ;定义目的操作数为字节单元;定义目的操作数为字节单元MOV WORD PTR SI,20 ;定义目的操作数为字单元;定义目的操作数

    18、为字单元(5)类型操作符)类型操作符LABELX LABEL BYTE ;X单元的类型定义为单元的类型定义为BYTE字节型,也可以定字节型,也可以定 义为义为 WORD字型、字型、DWORD双字型等双字型等 6.注释伪指令注释伪指令分号分号“;”后面的内容为注释。后面的内容为注释。编写程序时最好加入注释,便于以后编写程序时最好加入注释,便于以后的阅读和修改。的阅读和修改。练习:练习:写出伪指令,并回答问题。写出伪指令,并回答问题。(1)定义名为)定义名为NEW的字单元,保存的字单元,保存10,20,30,40四个数四个数(2)将)将NEW单元的段地址放入单元的段地址放入DX寄存寄存器,偏移地址

    19、放入器,偏移地址放入BX寄存器寄存器(3)NEW中数值中数值40所在单元的偏移地所在单元的偏移地址是多少?址是多少?(4)如果将)如果将NEW单元的偏移地址设置单元的偏移地址设置为为10H,用什么伪指令?,用什么伪指令?4.3基本汇编指令基本汇编指令1MOV传送指令传送指令 MOV传送指令是双操作数指令,传送指令是双操作数指令,SRC为源操作数、为源操作数、DST为目的操作数。要为目的操作数。要求两个操作数的属性必须一致。求两个操作数的属性必须一致。格式:格式:MOV DST,SRC 目的操作数,源操作数目的操作数,源操作数4.3.1 数据、栈及查表数据、栈及查表2.数据交换指令数据交换指令X

    20、CHGXCHG指令是双操作数指令,指令的功能是将两个操指令是双操作数指令,指令的功能是将两个操作数的内容互换。要求必须有一个操作数是寄存器,作数的内容互换。要求必须有一个操作数是寄存器,而且两个操作数的属性必须一致。操作数不能为立即而且两个操作数的属性必须一致。操作数不能为立即数。数。格式:格式:XCHG OPR1,OPR2例例1 XCHG AX,BX ;寄存器;寄存器AX和和BX的内容互换的内容互换XCHG BX,AL ;AL寄存器的内容和字节型寄存器的内容和字节型 存储单元的内容互换存储单元的内容互换XCHG CX,XSI ;CX寄存器的内容和字型存寄存器的内容和字型存 储单元的内容互换储

    21、单元的内容互换3进栈和出栈指令进栈和出栈指令(1)PUSH进栈指令进栈指令 格式:格式:PUSH SRC执行操作:(执行操作:(SP)(SP)-2 (SP)+1,(SP)(SRC)先将堆栈指针先将堆栈指针SP减减2,再将操作数,再将操作数SRC入栈。要求入栈。要求SRC必须是字。必须是字。PUSH AX (2)POP出栈指令出栈指令 格式:格式:POP DST执行操作:执行操作:(DST)(SP)+1,(SP)(SP)(SP)+2将堆栈指针所指字单元的内容弹到操作数将堆栈指针所指字单元的内容弹到操作数DST中,再中,再将将SP加加2。POP AX例例1 已知已知(AX)=95E3H,(BX)=

    22、1986H,(SP)=0010H,(SS)=1250H,将,将AX、BX压栈保存。画出入栈过程。压栈保存。画出入栈过程。执行指令:执行指令:PUSH AX PUSH BX入栈过程示意:入栈过程示意:例例2 上例中,接着执行若干指令后,上例中,接着执行若干指令后,再执行出栈操作。再执行出栈操作。执行指令:执行指令:MOV AX,0MOV BX,1POP BXPOP AX 出栈过程示意:出栈过程示意:如果在写出栈指令时,换成别的寄存如果在写出栈指令时,换成别的寄存器,那么就相当于用堆栈中的数据给器,那么就相当于用堆栈中的数据给其他寄存器赋值。例如:其他寄存器赋值。例如:PUSH AXPUSH BX

    23、POP CXPOP DX执行后执行后(CX)=1986H,(DX)=95E3H。设计思路:设计思路:(1)用伪指令定义存储单元用伪指令定义存储单元x中的三个数中的三个数(2)y存储单元预留出三个空单元存储单元预留出三个空单元(3)用用PUSH和和POP指令实现数的倒序存放指令实现数的倒序存放(4)PUSH和和POP的操作数均采用直接寻址的操作数均采用直接寻址方式方式程序如下:程序如下:示例示例4-1 设计程序。利用堆栈,将存设计程序。利用堆栈,将存储单元中的三个数倒序存放。储单元中的三个数倒序存放。;程序;程序4-1.asm3个数的倒序存放个数的倒序存放data segmentx dw 12,

    24、34,56y dw 3 dup(?)data endscode segmentassume cs:code,ds:datastart:mov ax,data mov ds,ax push x push x+2 push x+4 pop y pop y+2 pop y+4 mov ah,4ch int 21hcode ends end start4.查表转换指令查表转换指令XLAT(1)格式:)格式:XLAT执行的操作:在执行的操作:在BX为表首地址的内存表为表首地址的内存表中查找相对地址为中查找相对地址为AL的单元,取出其中的单元,取出其中的内容放入的内容放入AL中。中。(2)要求:数据表的首

    25、地址放入)要求:数据表的首地址放入BX,要查找的单元的偏移地址由要查找的单元的偏移地址由AL指出。指出。(3)功能:把)功能:把AL中的数据换成对应的中的数据换成对应的存储单元中的内容。存储单元中的内容。设计思路:设计思路:(1)一位十六进制数:一位十六进制数:0-9,A-F(2)ASCII码:码:30H,39H,41H,42H,46H(3)算法确定:建立数据表)算法确定:建立数据表TABLE,并以十,并以十六进制数六进制数HEX作为索引号(位移量)作为索引号(位移量)(4)采用)采用DOS中断调用实现显示功能中断调用实现显示功能TABLE表在内存的存储情况:表在内存的存储情况:示例示例4-2

    26、 编程序。用查表指令将一位十六进编程序。用查表指令将一位十六进制数转换为它相应的制数转换为它相应的ASCII码并显示出该数。码并显示出该数。;program 4-2.asmdata segmenttable db 30h,31h,32h,33h,34h,35h,36h,37h db 38h,39,41h,42h,43h,44h,45h,46hhex db 6 ;要查找;要查找6ascii db?data endscode segmentassume cs:code,ds:databegin:mov ax,datamov ds,axmov bx,offset table;bxtable表的偏移地

    27、址表的偏移地址mov al,hex;al6xlat;换码指令;换码指令mov ascii,al;保存查到的;保存查到的ASCII码码mov dl,al;要显示的字符放入;要显示的字符放入DLmov ah,02h ;DOS中断调用的中断调用的2号功能号功能int 21h;INT中断调用指令中断调用指令mov ah,4chint 21hcode endsend begin 4.3.2 逻辑地址的获得逻辑地址的获得LEA有效地址传送指令有效地址传送指令格式:格式:LEA 寄存器,存储单元寄存器,存储单元功能:将存储单元的有效地址传送给寄功能:将存储单元的有效地址传送给寄存器。其作用与前面讲的存器。其

    28、作用与前面讲的OFFSET操作操作符的作用一样。符的作用一样。例:例:LEA BX,TABLE LEA DX,BX LEA BX,COUNTSI 2LDS数据段地址传送指令数据段地址传送指令 格式:格式:LDS 寄存器,双字存储单元寄存器,双字存储单元功能:将双字单元中保存的低字送入寄存器,功能:将双字单元中保存的低字送入寄存器,高字传送给高字传送给DS数据段寄存器。数据段寄存器。例:已知例:已知(DS)=1300H,(BX)=0032H,(13032H)=3504H,(13034H)=2936H,执行指令:执行指令:LDS SI,BX源操作数的有效地址为源操作数的有效地址为0032H其物理地

    29、址其物理地址=1300H10H+0032H=13032H指令执行后:指令执行后:(SI)=3504H,(DS)=2936H3LES附加段地址传送指令附加段地址传送指令格式:格式:LES 寄存器,双字存储单元寄存器,双字存储单元功能:将双字单元中保存的低字送入寄存功能:将双字单元中保存的低字送入寄存器,高字传送给器,高字传送给ES数据段寄存器。数据段寄存器。例:已知例:已知(DS)=1400H,(BX)=0046H,(14046H)=2307H,(14048H)=5640H,执,执行指令:行指令:LES DI,BX源操作数的有效地址为源操作数的有效地址为0046H其物理地址其物理地址=(DS)1

    30、0H+EA =1400H10H+0046H=14046H指令执行后:指令执行后:(DI)=2307H,(ES)=5640H 4.3.3 符号位扩展符号位扩展1CBW字节扩展为字指令字节扩展为字指令格式:格式:CBW功能:将功能:将AL扩展到扩展到AX。如果。如果AL的符号位为的符号位为0,则则AH为为0,如果,如果AL的符号位为的符号位为1,则,则(AH)=FFH2CWD字扩展为双字指令字扩展为双字指令格式:格式:CWD功能:将功能:将AX扩展到扩展到DX。如果。如果AX的符号位为的符号位为0,则则DX为为0,如果,如果AX的符号位为的符号位为1,(DX)=FFFFH4.3.4 双精度数运算双

    31、精度数运算无论是单精度数运算还是双精度数运无论是单精度数运算还是双精度数运算,都要用到算术运算类指令。算,都要用到算术运算类指令。算术运算类指令包括加法指令、减法算术运算类指令包括加法指令、减法指令、乘法指令、除法指令四种类型。指令、乘法指令、除法指令四种类型。这些指令有双操作数指令也有单操作这些指令有双操作数指令也有单操作数指令,运行的结果会影响标志位。数指令,运行的结果会影响标志位。1ADD加法指令加法指令格式:格式:ADD DST,SRC功能:源操作数和目的操作数相加,结果再放入功能:源操作数和目的操作数相加,结果再放入目的操作数目的操作数DST。2.ADC带进位加法指令带进位加法指令格

    32、式:格式:ADC DST,SRC功能:源操作数加上目的操作数再加上进位标志功能:源操作数加上目的操作数再加上进位标志CF,结果放入目的操作数,结果放入目的操作数DST。ADC带进位加法指令一般用在双精度加法操作带进位加法指令一般用在双精度加法操作中。中。例例:ADD AX,5 ADD AL,30H ADD BH,CL ADD AX,SI ADD BYTE PTRBX,2 3INC加加1指令指令格式:格式:INC OPR功能:将操作数功能:将操作数OPR加加1设计思路:设计思路:(1 1)两个双精度数存放在数据段中。相)两个双精度数存放在数据段中。相加后的结果也放在数据段中。加后的结果也放在数据

    33、段中。(2 2)程序中用)程序中用dx、ax存放第一个双精度存放第一个双精度数数20034910h,用,用cx、bx存放第二个双存放第二个双精度数精度数1008e699h。程序如下:程序如下:示例示例4-4 编程序实现两个双精度数编程序实现两个双精度数20034980H和和1008E699H加法运算。加法运算。;program 4-4.asm 两个双精度数加法两个双精度数加法code segmentassume cs:code,ds:datastart:mov ax,data mov ds,ax mov ax,ds:0;第一个双精度数的低字;第一个双精度数的低字 mov dx,ds:2;第一个

    34、双精度数的高字;第一个双精度数的高字 mov bx,ds:4;第二个双精度数的低字;第二个双精度数的低字 mov cx,ds:6;第二个双精度数的高字;第二个双精度数的高字 add ax,bx;低字相加;低字相加 adc dx,cx;高字带进位加;高字带进位加 mov ds:8,ax mov ds:10,dx mov ah,4ch int 21hcode endsend startdata segment dd 20034980h dd 1008e699h dd?data ends4.3.5 多字节数运算多字节数运算1SUB减法指令减法指令格式:格式:SUB DST,SRC功能:目的操作数减源

    35、操作数,结果再功能:目的操作数减源操作数,结果再放入目的操作数放入目的操作数DST。2SBB带借位减法指令带借位减法指令格式:格式:SBB DST,SRC功能:目的操作数减去源操作数后再减功能:目的操作数减去源操作数后再减去进位标志去进位标志CF,结果放入目的操作数,结果放入目的操作数DST。SBB带借位减法指令一般用在双精度减带借位减法指令一般用在双精度减法操作中。法操作中。3DEC减减1指令指令格式:格式:DEC OPR功能:将操作数功能:将操作数OPR减减14NEG求补指令求补指令格式:格式:NEG OPR功能:将操作数求反加功能:将操作数求反加1。即求补操作,。即求补操作,对正数的补码

    36、求补变为其负数的补码,对正数的补码求补变为其负数的补码,对负数的补码求补变为其正数的补码。对负数的补码求补变为其正数的补码。利用利用NEG指令可以求负数的绝对值。指令可以求负数的绝对值。5CMP比较指令比较指令格式:格式:CMP OPR1,OPR2功能:将两个操作数作相减运算,结果功能:将两个操作数作相减运算,结果不回送,改变标志位。通常后跟条件转不回送,改变标志位。通常后跟条件转移指令,根据移指令,根据CMP比较之后标志位的值比较之后标志位的值进行转移。进行转移。4.3.6 乘除运算乘除运算 1MUL无符号数乘法指令无符号数乘法指令乘法指令是单操作数指令。字节乘法的乘法指令是单操作数指令。字

    37、节乘法的8位被位被乘数隐含在乘数隐含在AL中,字乘法的中,字乘法的16位被乘数隐位被乘数隐含在含在AX;乘数写在指令中。;乘数写在指令中。(1)字节乘法)字节乘法格式:格式:MUL SRC功能:功能:(AX)(AL)(SRC)执行的操作:将执行的操作:将AL与字节型源操作数与字节型源操作数SRC相相乘,乘积放入乘,乘积放入AX寄存器。即两个寄存器。即两个8位数相乘,位数相乘,乘积为乘积为16位数。位数。(2)字乘法)字乘法格式:格式:MUL SRC功能:功能:(DX、AX)(AX)(SRC)执行的操作:将执行的操作:将AX与字型源操作数与字型源操作数SRC相乘,乘积放入相乘,乘积放入DX、AX

    38、寄存器,即乘寄存器,即乘积为双精度数。积为双精度数。2IMUL带符号数乘法指令带符号数乘法指令与无符号数乘法指令格式一样,但是指令的操与无符号数乘法指令格式一样,但是指令的操作码改为作码改为IMUL。执行带符号数乘法指令时,。执行带符号数乘法指令时,系统将把操作数作为补码进行运算。系统将把操作数作为补码进行运算。(1)字节乘法)字节乘法格式:格式:IMUL SRC(2)字乘法)字乘法格式:格式:IMUL SRC例例1 设设(AL)=35H,(BL)=89H。用无。用无符号乘法指令做乘法操作,用符号乘法指令做乘法操作,用DEBUG 观察运行结果。观察运行结果。35H=53,89H=137,乘积是

    39、乘积是1C5DH=7261。MOV AL,35HMOV BL,89HMUL BL例例2 设设(AL)=35H,(BL)=89H。用带。用带符号乘法指令做乘法操作,观察运行符号乘法指令做乘法操作,观察运行结果。补码结果。补码35H=53,89H=-119,乘,乘积是积是E75DH=-6307。MOV AL,35HMOV BL,89HIMUL BL4.3.7 混合算术运算混合算术运算 1DIV无符号数除法指令无符号数除法指令除法指令也是单操作数指令。字节除法的除法指令也是单操作数指令。字节除法的16位位被除数隐含在被除数隐含在AX中,中,8位除数在指令中;字位除数在指令中;字除法的除法的32位被除

    40、数隐含在位被除数隐含在DX、AX,16位除位除数写在指令中。数写在指令中。(1)字节除法)字节除法格式:格式:DIV SRC功能:功能:(AL)(AX)(SRC)的商的商 (AH)(AX)(SRC)的余数的余数执行的操作:执行的操作:16位被除数位被除数AX与与8位源操作数位源操作数SRC相除,相除,8位的商放入位的商放入AL寄存器,寄存器,8位余位余数在数在AH寄存器中。寄存器中。(2)字除法)字除法格式:格式:DIV SRC功能:功能:(AX)(DX、AX)(SRC)的商的商 (DX)(DX、AX)(SRC)的余数的余数执行的操作:执行的操作:32位被除数位被除数DX、AX与与16位源操位

    41、源操作数作数SRC相除,相除,16位的商放入位的商放入AX寄存器,寄存器,16位余数在位余数在DX寄存器中。寄存器中。2IDIV带符号数除法指令带符号数除法指令指令的操作码为指令的操作码为IDIV。指令格式与无符。指令格式与无符号数除法一样。号数除法一样。执行带符号数除法指令时,系统把操作执行带符号数除法指令时,系统把操作数作为带符号数补码进行运算,商和数作为带符号数补码进行运算,商和余数也都是带符号数。余数也都是带符号数。(1)字节除法)字节除法格式:格式:IDIV SRC(2)字除法)字除法格式:格式:IDIV SRC示例示例4-6 编程序,实现混合算术运算。算术编程序,实现混合算术运算。

    42、算术表达式如下:表达式如下:W=(X3Y45)Z其中,其中,X、Y、Z均为均为16位带符号数。要求运算位带符号数。要求运算结果的商保存在结果的商保存在W、余数保存在、余数保存在W+2单元中。单元中。设计思路:设计思路:(1)在数据段中定义)在数据段中定义4个字型变量个字型变量X、Y、Z、W。(2)采用带符号数乘除指令,要注意操作数)采用带符号数乘除指令,要注意操作数的属性问题。的属性问题。(3)假定)假定X、Y、Z的值如程序所示,则结果的值如程序所示,则结果应为:商在应为:商在W单元单元=FFFCH=4,余数在,余数在W+2单元单元=FFFCH。程序如下:程序如下:data segment x

    43、 dw 48 y dw-21 z dw 14 w dw?,?data endscode segmentassume cs:code,ds:datastart:mov ax,data mov ds,ax mov ax,3 imul y mov bx,ax mov cx,dx mov ax,x cwd add ax,bx adc dx,cx sub ax,45 sbb dx,0 idiv z mov w,ax mov w+2,dx mov ah,4ch int 21hcode ends end start W=(X3Y45)Z4.3.8 十进制数运算十进制数运算1、压缩的、压缩的BCD码加法调整码

    44、加法调整格式:格式:DAA功能:如果功能:如果AL的低的低4位大于位大于9,则将,则将AL加加6,并将辅助进位标志,并将辅助进位标志AF置置1。如。如果果AL的高的高4位大于位大于9,将,将AL加加60H,并将进位标志并将进位标志CF置置1。例例 十进制计算十进制计算57=12,用,用BCD码表示做计码表示做计算。算。X DB 05H Y DB 07HMOV AL,XADD AL,Y ;相加后,;相加后,(AL)=00001100=0CHDAA;加;加6调整后,调整后,(AL)=00010010=12H(压缩的(压缩的BCD码)码)2压缩的压缩的BCD码减法调整码减法调整格式:格式:DAS 功

    45、能:如果功能:如果AL的低的低4位大于位大于9,则将,则将AL减减6,并将,并将AF置置1。如果。如果AL的高的高4位大位大于于9,将,将AL减减60H,并将,并将CF置置1。例例 十进制计算十进制计算6238=24W1 DB 62H;BCD码表示的十进制码表示的十进制62W2 DB 38HMOV AL,W1SUB AL,W2;相减后,;相减后,(AL)=2AHDAS;减;减6调整后,调整后,(AL)=24H3.非压缩非压缩BCD码加法调整码加法调整格式:格式:AAA功能:如果功能:如果AL的低的低4位大于位大于9,将,将AL加加6、AH加加1,AL的高的高4位清零、位清零、CF、AF置置1。

    46、由于非压缩的由于非压缩的BCD码用码用1个字节表示个字节表示1个个十进制数,所以调整后若加上十进制数,所以调整后若加上30H就是就是该数值的该数值的ASCII码。码。例例 十进制计算十进制计算6+8=14,用非压缩的,用非压缩的BCD码表示并显示在屏幕上。码表示并显示在屏幕上。T1 DB 06HT2 DB 08HMOVAL,T1;(AL)=00000110=06HADDAL,T2;(AL)=00001110=0EHAAA;调整后;调整后(AH)=01H,(AL)=04HADD AX,3030H ;AH、AL分别加上分别加上30H,变成,变成ASCII码码MOVBX,AX;用;用BX保存保存MO

    47、V DL,BH;显示;显示“1”MOV AH,2;2号显示功能号显示功能INT 21H;DOS中断调用中断调用MOV DL,BL;显示;显示“4”INT 21H4非压缩的非压缩的BCD码减法调整码减法调整格式:格式:AAS 功能:如果功能:如果AL的低的低4位大于位大于9,将,将AL减减6、AH减减1,AL的高的高4位清零、位清零、CF、AF置置1。例例 十进制计算十进制计算5718=39,用非压缩的,用非压缩的BCD码表示。码表示。MOV AX,0507HMOV BX,0108HSUB AL,BLSUB AH,BH;高位不用带借位减;高位不用带借位减 AAS;减法调整后;减法调整后 (AX)

    48、=0309H 5非压缩的非压缩的BCD码乘法调整码乘法调整格式:格式:AAM (ASCII Adjust Multiply)功能:将乘积功能:将乘积AX中的中的2个非压缩的个非压缩的BCD码调整。码调整。AL除以除以0AH,得到的商送,得到的商送AH,余数送入,余数送入AL。即乘积的高位数在。即乘积的高位数在AH、低位数在、低位数在AL中。中。例例 十进制乘法十进制乘法68=48,用非压缩的,用非压缩的BCD码表示,并显示。码表示,并显示。P1 DB 06HP2 DB 08H MOV AL,P1;(AL)=00000110=06HIMUL P2;(AL)=00110000=30HAAM;调整后

    49、;调整后(AH)=04H,(AL)=08HADD AX,3030H ;AH、AL分别加上分别加上30HMOV BX,AX;用;用BX保存保存MOV DL,BH;显示;显示“4”MOV AH,2INT 21HMOV DL,BL;显示;显示“8”INT 21H6非压缩的非压缩的BCD码除法调整码除法调整格式:格式:AAD (ASCII Adjust Division)功能:在做除法之前,将被除数功能:在做除法之前,将被除数AX中的中的2个非压缩的个非压缩的BCD码调整。码调整。(AL)=(AL)+(AH)*10,AH清零。除法清零。除法之后,商在之后,商在AL、余数在、余数在AH中。中。4.4 屏

    50、幕显示和键盘输入屏幕显示和键盘输入 常用的常用的DOS功能有功能有5个:个:键盘输入键盘输入1个字符:个字符:01号号DOS功能调用功能调用显示器输出显示器输出1个字符:个字符:02号号DOS功能调用功能调用键盘输入缓冲区:键盘输入缓冲区:0AH号号DOS功能调用功能调用显示字符串:显示字符串:09号号DOS功能调用功能调用返回返回DOS控制:控制:4CH号号DOS功能调用功能调用4.4.1 DOS功能调用功能调用 1单字符的输入输出单字符的输入输出(1)1号功能键盘输入号功能键盘输入格式:格式:AH=1 INT 21H功能:从键盘输入一个字符并将该字符功能:从键盘输入一个字符并将该字符的的A

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:最新汇编语言第4章顺序程序设计课件.ppt
    链接地址:https://www.163wenku.com/p-4968790.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库