




已阅读5页,还剩108页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,2.2指令系统,概述特点:把数据从计算机的一个部位传送到另一部位 传送类指令中有2个操作数 :源操作数和目的操作数源操作数是指发送部位的操作数目的操作数是指接收部位的操作数指令操作:将源操作数的内容送到目的操作数,交换指令除外 指令分类:数据传送、地址传送、标志传送、输入输出和交换,2.2.1数据传送类指令,2,2.2指令系统,数据传送类指令数据传送指令指令格式:MOV DST, SRC; DSTSRCMOV指令把源操作数(source)传送到目的操作数(destination) 设指令执行前,(AX) = 2345H,(BX) = 1111H。指令“MOV AX, BX”执行后,(AX)= 1111H,(BX)= 1111H。 源操作数BX的内容被复制到AX寄存器内,源操作数BX的内容保持不变,目的操作数AX的原内容被覆盖。,2.2.1数据传送类指令,3,2.2指令系统,数据传送类指令数据传送指令指令格式:MOV DST, SRC; DSTSRC指令操作:把一个字节或一个字操作数从源传送到目的地,源操作数可以是寄存器、段寄存器、存储器以及立即操作数,目的操作数可以是寄存器、存储器和段寄存器数据传送方向:图2-2-1。,2.2.1数据传送类指令,4,2.2指令系统,数据传送方向:图2-2-1。注意:立即操作数、段寄存器CS只能作为源操作数;源、目的操作数只能有一个是存储器操作数;立即操作数不能直接送给段寄存器。,2.2.1数据传送类指令,5,2.2指令系统,MOV指令有九种形式:MOV REG,REG;(REG)(REG)MOV REG16,SEGREG;(REG16)(SEGREG)MOV REG,MEM ;(REG)(MEM)MOV REG,IMM ;(REG)IMMMOV MEM,REG ;(MEM)(REG)MOV MEM16,SEGREG ;(MEM16)(SEGREG)MOV MEM,IMM ;(MEM)IMMMOV SEGREG,REG16 ;(SEGREG)(REG16),CS除外MOV SEGREG,MEM16 ;SEGREGMEM16,CS除外,2.2.1数据传送类指令,6,2.2指令系统,指令实例:例2-2-1-1 MOV指令举例(寄存器、寄存器操作数):正确: MOVCL, DH ;字节传送指令,DH寄存器内容送入CL MOVAX, CS ; 字传送指令,CS寄存器内容送入AX MOVSS, CX ; 字传送指令,CX寄存器内容送入SS错误: MOV CL, DX ;操作数类型不匹配 MOV CS , AX; CS寄存器不能作为目的操作数 MOV DS, CS; 不能同时为段寄存器,2.2.1数据传送类指令,7,2.2指令系统,指令实例:例2-2-1-2 MOV指令举例(立即数、寄存器操作数):正确: MOVAL, 30H;字节传送指令,执行后(AL)= 30H MOVAX, 30H;字传送指令,执行后(AX)= 0030H MOVAL, -5 ;字节传送指令,执行后(AL)= 0FBH MOVAX, -5 ;字传送指令,执行后(AX)= 0FFFBH错误: MOV 30H, AL ;立即数不能用作目的操作数 MOV AL, 300H ; 源操作数超出范围,2.2.1数据传送类指令,8,2.2指令系统,指令实例:例2-2-1-3 MOV指令举例(存储器、寄存器操作数):正确: MOVBP, BL; 字节传送指令,BL寄存器内容送SS:BP MOVBX, AX;字传送指令,AL内容送DS:BX, ; AH内容送DS:BX+1 MOVDX, SI;字传送指令, DS: SI内容送入DL,;DS: SI+1内容送入DH错误: 假设变量X_BYTE用DB定义 MOVDX, BL; DX寄存器不能用来寄存器间接寻址 MOV X_BYTE, AX ; 操作数类型不匹配,2.2.1数据传送类指令,9,2.2指令系统,指令实例:例2-2-1-4 MOV指令举例(存储器、立即数操作数):MOV mem data ;B/WData可以是字节立即数,也可以是字立即数。Mem-必须作数据类型说明。(BYTE PTR-字节操作、 WORD PTR-字操作)例:2-2-1-4-1 MOV BYTE PTR BX ,20H ;说明目的存储器操作数MEM是字节单元。设DS=3000H, BX =2200H,物理地址=30000+2200=32200H执行前:(32200H)=ACH执行后: (32200H)=20H,2.2.1数据传送类指令,10,2.2指令系统,指令实例:例2-2-1-4 MOV指令举例(存储器、立即数操作数):MOV mem data ;B/WData可以是字节立即数,也可以是字立即数。Mem-必须作数据类型说明。(BYTE PTR-字节操作、 WORD PTR-字操作)例:2-2-1-4-2 MOV WORD PTR BX,234BH ;说明目的操作数存储单元是字单元。设DS=3000H,BX=1000H,物理地址=31000H执行前:(31000H)=45H (31001H)=74H执行后: (31000H)=4BH (31001H)=23H,2.2.1数据传送类指令,11,2.2指令系统,指令实例:例2-2-1-4例2-2-1-4-3:某一数据段:DATA_SEG SEGMENT ;数据段开始AREA1 DB 14H,3BHAREA2 DB 3 DUP(0)ARRAY DW 3100H,01A6HSTRING DB GOODDATA_SEG ENDS ;数据段结束,2.2.1数据传送类指令,12,2.2指令系统,指令实例:例2-2-1-4例2-2-1-4-3:某一数据段:1、数据段以段说明符SEGMENT开始,以ENDS结束, DATA_SEG 是数据段的段名。 2、DB伪操作符是定义字节变量,说明其后每一个操作占一个字节。 3、DW伪操作符是定义字变量,说明其后每一个操作占一个字。,2.2.1数据传送类指令,13,2.2指令系统,指令实例:例2-2-1-4例2-2-1-4-3:某一数据段:4、DUP是复制操作符,它前面的3表示在存储器中保留3个字节单元,且初值是0。 5、符号地址: AREA1的偏移地址为0000H AREA2的偏移地址为0002H ARRAY的偏移地址为0005H STRING的偏移地址为0009H,2.2.1数据传送类指令,14,2.2指令系统,指令实例:例2-2-1-4-5:MOV DX,OFFSET ARRAY;将ARRAY的偏移地址送DX寄存器中,OFFSET为属性操作符,表示应把后面的符号地址的值作为操作数(DX)=0005HMOV AL,AREA1;ALAREA1中的内容14HMOV AREA2,AL;0002H单元14H,2.2.1数据传送类指令,15,2.2指令系统,使用MOV指令须注意:MOV指令的使用限制: 源操作数与目的操作数可以是字节、字或双字,但必须有 相同的类型; 源操作数与目的操作数不能同时为存储器操作数; 目的操作数不能是立即数; FLAGS、IP不能用作操作数。对于段寄存器作为操作数的MOV指令: 源操作数与目的操作数不能同时为段寄存器; 目的操作数是段寄存器时,源操作数只能是寄存器或存储 器,不能是立即数; CS不能用作目的操作数。,2.2.1数据传送类指令,16,4.2.1数据传送类指令,2.2指令系统,进栈指令指令格式:PUSH SRC ; SP-1 SRCH,SP-2 SRCL,SPSP-2 ; SRC 为REG16或MEM16 或SEGREGPUSHF ;SP-1 FLAGH ,SP-2 FLAGL, SPSP-2 指令操作:该类指令可将16位寄存器、存储器相邻两单元、段寄存器和标志寄存器的内容压入堆栈栈顶。该类指令一般仅给出源操作数,且都是字信息,目的操作数被操作助记符隐含着。而标志寄存器的内容进栈则源和目的都是被操作助记符隐含着。,2.2.1数据传送类指令,17,4.2.1数据传送类指令,2.2指令系统,进栈指令例2-2-1-5PUSH AX执行前:SP=2500H SS=5000H AX=3125H指令执行:首先SPSP-1(SP=24FFH), AH(31H)24FFH单元然后SPSP-1(SP=24FEH),AL(25H) 24FEH单元最后SP=24FEH,比操作前减2,2.2.1数据传送类指令,18,2.2指令系统,指令实例:例2-2-1-6MOV AX, 5000H;AX5000HMOV SS, AX ;SSAX,设置堆栈段为5000HMOV SP, 1000H ;SP1000H,设置堆栈指针为1000HPUSHF ;SP-1 FLAGH、;SP-2 FLAGL、SPSP-2PUSH AX ;SP-1 AH、SP-2 AL、;SPSP-2PUSH DS ;SP-1 DSH、SP-2 DSL、;SPSP-2,2.2.1数据传送类指令,19,2.2指令系统,出栈指令指令格式:POP DST; DSTL SP,DSTHSP+1, SPSP+2 ;DST为REG16或MEM16 或SEGREGPOPF ; FLAGL SP,FLAGHSP+1,;SPSP+2指令操作:该类指令可将栈顶内容(字信息占两个单元)弹出送到16位寄存器、段寄存器(不允许是CS)、存储器相邻两单元或标志寄存器中,源操作数被助记符隐含,目的操作数被显式给出。它是进栈指令的逆操作。,2.2.1数据传送类指令,20,2.2指令系统,指令实例:例2-2-1-7POP BX 执行前:SS=5000H,SP=1000H,BX=75C1H过程:1、BLSS:1000H所指单元的内容6BH,SPSP+1 2、BHSS:1001H所指单元的内容48H,SPSP+1最后:SP=1002H,BX=486BH,2.2.1数据传送类指令,21,2.2指令系统,指令实例:例2-2-1-8在子程序和中断服务程序中,保护现场和恢复现场时,要用入栈和出栈指令。如:PUSH AX;保护AX的内容 PUSH BX;保护BX的内容 ;此程序段要用到AX 和BX,所以在 之前要保存原先内容。 POP BX;恢复BX的原先的内容。 POP AX; 恢复AX的原先的内容。,2.2.1数据传送类指令,22,2.2指令系统,指令实例:例2-2-1-9在子程序和中断服务程序中,常用PUSHF和POPF保护和恢复需要的标志位,利用这两条指令还可以方便地改变标志寄存器中任一位的状态。如8086/8088指令系统中没有能直接修改TF标志的指令,可用以下程序来实现TF的改变:如:PUSHF POP AX ;标志寄存器内容送AX. OR AH, 01H ;将TF位置1 PUSH AX POPF ; AX的内容送标志寄存器。,2.2.1数据传送类指令,23,标志寄存器传送指令有两条标志寄存器传送指令,指令只涉及标志寄存器的低8位,而对高8位没有影响。LAHF(Load AH With Flags)将标志寄存器的低8位送AHSAHF(Store AH Into Flags) ;将AH的内容送标志寄存器的低8位,它的执行刷新了SF, ZF, AF, PF, CF标志位。,2.2指令系统,2.2.1数据传送类指令,24,2.2指令系统,地址传送指令8086/8088有三种专门传送地址的指令 :1. 传送偏移地址到寄存器;2. 传送进入数据段的地址指针;3. 传送进入附加段的地址指针。段地址和偏移地址也称为地址指针。,2.2.1数据传送类指令,25,2.2指令系统,传送偏移地址到寄存器指令格式:LEA REG16,MEM指令操作:这里源操作数必须是存储器操作数,目的操作数必须是16位寄存器,指令意义是将源操作数的偏移地址送任一16位寄存器。该指令通常用来往某个REG16中设置偏移地址的初值,以便从此地址开始存取多个数据。指令实例:例2-2-1-9-1 假设变量X的偏移地址为048CH, LEA DX, X ; 执行后, DX=048CH 假设BP=1820H, SI=0068H LEA BX, 4BPSI ; 执行后, BX=4+1820H+0068H =188CH,2.2.1数据传送类指令,26,2.2指令系统,传送偏移地址到寄存器指令格式:LEA REG16,MEM指令操作:这里源操作数必须是存储器操作数,目的操作数必须是16位寄存器,指令意义是将源操作数的偏移地址送任一16位寄存器。该指令通常用来往某个REG16中设置偏移地址的初值,以便从此地址开始存取多个数据。指令实例:例2-2-1-9-2 设SI=1000H , DS=5000H , (51000H)=1234H LEA BX ,SI ;执行后,BX=1000H MOV BX,SI;执行后,BX=1234H,2.2.1数据传送类指令,27,2.2指令系统,传送偏移地址到寄存器指令格式:LEA REG16,MEM指令操作:这里源操作数必须是存储器操作数,目的操作数必须是16位寄存器,指令意义是将源操作数的偏移地址送任一16位寄存器。该指令通常用来往某个REG16中设置偏移地址的初值,以便从此地址开始存取多个数据。指令实例:例2-2-1-9-3下面两条指令等价,取TABLE的偏移地址,并送BX中。 LEA BX ,TABLE MOV BX,OFFSET TABLE ;OFFSET返回变量或标号的偏地址。,2.2.1数据传送类指令,28,2.2指令系统,传送偏移地址到寄存器指令格式:LEA REG16,MEM指令操作:这里源操作数必须是存储器操作数,目的操作数必须是16位寄存器,指令意义是将源操作数的偏移地址送任一16位寄存器。该指令通常用来往某个REG16中设置偏移地址的初值,以便从此地址开始存取多个数据。指令实例:例2-2-1-9-4 LEA BX,BX+SI+0F62 执行前:BX=0400H,SI=003CH 执行后:BX=0400H+003CH+0F62H=139EH,2.2.1数据传送类指令,29,2.2指令系统,传送进入数据段的地址指针 地址传送指令LDS,LES 地址传送指令从存储器取出4B, 前面(两个低字节)的2B送入指定的寄存器, 后面(两个高字节)的2B送入由指令操作码包含的段寄存器。 LDS REG16, MEM32 ; 从存储器取出4B,送入REG16和DS LES REG16, MEM32 ; 从存储器取出4B,送入REG16和ES例2-2-1-10 -1将双字指针送到寄存器和DS指令 设DS=1200H,(12450H)=F346H, (12452H)=0A90H LDS SI,450H; 源物理地址=12000H+450H=12450H 执行后:SI=F346H,DS=0A90H,2.2.1数据传送类指令,30,2.2指令系统,传送进入数据段的地址指针 地址传送指令LDS,LES 地址传送指令从存储器取出4B, 前面(两个低字节)的2B送入指定的寄存器, 后面(两个高字节)的2B送入由指令操作码包含的段寄存器。 LDS REG16, MEM32 ; 从存储器取出4B,送入REG16和DS LES REG16, MEM32 ; 从存储器取出4B,送入REG16和ES 例2-2-1-10-2 将双字指针送寄存器和ES指令 设DS=0100H,BX=0020H,(01020H)=0300H, (01022H)=0500H LES DI,BX ; 源物理地址=01000+0020=01020H 执行后:DI=0300H,ES=0500H,2.2.1数据传送类指令,31,2.2指令系统,交换类指令交换指令指令格式:XCHG DST,SRC; DSTSRC指令操作:该指令可实现一个字节或一个字的源操作数与目的操作数的交换。交换能在寄存器之间、寄存器与存储器之间进行。三种具体形式:XCHG REG, REG ;REGREGXCHG REG, MEM ;REGMEMXCHG MEM, REG ;MEMREG,2.2.1数据传送类指令,32,2.2指令系统,指令实例:例2-2-1-11XCHG AH, CL ;AHCLXCHG BFF1, AX ;(BFF1+1、BF1)AXXCHG BX, COUNT SI;BX(COUNT SI+1、COUNT SI) 例如,(AX)= 5678H XCHG AH, AL;(AX)= 7856H指令说明:BFF1在本节为字变量,BFF1+1、BFF1、COUNT SI+1、COUNT SI分别表示以它们为偏移地址的存储单元的内容。交换指令的使用注意:不能在两个存储单元之间直接交换数据,段寄存器和立即数不能作为操作数。,2.2.1数据传送类指令,33,2.2指令系统,换码指令(查表转换指令)指令格式:XLAT LABEL ;LABEL:表格首地址,为可读性而设XLAT;指令操作:完成一个字节的查表转换。它将数据段中偏移地址为BX与AL寄存器之和的存储器单元的内容送入AL. (将BX指定的缓冲区中AL指定的位移处的数据取出送到AL。这是隐含寻址方式,默认使用BX,AL寄存器。) 使用XLAT前的准备工作: 1、建立一个表格,且BX表首地址 2、AL位移量(距表首地址的位移),因为AL是8位的,所以表格长度不超过256 3、执行XLAT,转换后的代码值AL。 即:ALDS:BX+AL,2.2.1数据传送类指令,34,2.2指令系统,指令实例:例如4-2-1-12 (完成功能: ALDS:BX+AL)若十六进制数字0F的LED七段码对照表如表所示,试用XLAT指令求数字5的七段码值。,2.2.1数据传送类指令,程序:设DS=4000H, 表首地址TABLE=0200HTABLE DB 40H,79H,24H, DB 30H,19H,12H, DB 02H,78H .MOV AL,5;AL数字5的位移量MOV BX,OFFSET TABLE ;BX表格首地址XLAT TABLE;查表得AL=12H,35,2.2指令系统,输入输出类指令 输入指令指令格式:IN AL, PORT8;字节输入:ALPORT8 (8位端口) ;地址为PORT的端口中将一字节数据读入AL中。IN AX, PORT8;字输入: ALPORT8,AHPORT8+1 ;从两个连续端口中将一个字读入AX累加器中。IN AL, DX ;字节输入 ;:其中DX的内容为外设地址,范围0000-0FFFFH,共64K个I/O端口。IN AX, DX;字输入指令操作:将端口数据读入到AL(字节)或AX(字)。,2.2.1数据传送类指令,36,2.2指令系统,输出指令指令格式: OUT PORT8, AL;字节输出:PORT8ALOUT PORT8, AX ;字输出(PORT8+1), PORT8) AXOUT DX, AL ;字节输出 (DX)ALOUT DX, AX ;字输出 (DX)+1),(DX)AX指令操作:将AL(字节)或AX(字)数据写到端口。,2.2.1数据传送类指令,37,2.2指令系统,输入输出类指令举例:例 2-2-1-13-1 IN AL, 0F1H ;AL从F1H端口读入一个字节 IN AX,80H; AL80H端口的内容 ;AH 81H端口的内容 MOV DX,210H; DX端口地址210H IN AL, DX ; AL210H端口的内容例2-2-1-13-2 OUT 85H,AL ;85H端口 AL MOV DX,0FF4H OUT DX,AL ;FF4H端口 AL MOV DX,300H;DX指向300H OUT DX,AX ;300H端口 AL ; 301H端口 AH,2.2.1数据传送类指令,38,2.2指令系统,数据传送类指令对标志寄存器的影响:MOV DST, SRCLEA REG16,MEM LDS REG16,MEM LES REG16,MEM XCHG DST,SRCXLAT LABELPUSH SRCPOP DSTPUSHF LAHF(Load AH With Flags)将标志寄存器的低8位送AH上述数据传送数指令对标志位无影响SAHF(Store AH Into Flags) ;将AH的内容送标志寄存器的低8位,它的执行刷新了SF, ZF, AF, PF, CF标志位。POPF (恢复原先保存的值),2.2.1数据传送类指令,39,2.2指令系统,8086/8088的算术运算指令包括二进制运算及十进制运算指令。有加、减、乘、除四种基本运算,及各种调整操作指令等。 加法类指令 不加进位位的加法指令 指令格式:ADD DST,SRC ;DSTDST+SRC 指令操作:目的操作数与源操作数相加,结果送目的操作数操作数要求:DST可以是寄存器或存储器,而SRC可以是立即操作数、寄存器或存储器,但DST、SRC不能同时为存储器。影响全部状态标志位。 (注:不含段寄存器操作数) 例:ADDAX, SI ; AX(AX)+(SI),16位运算 ADDX, 3 ; X(X)+3, 运算位数由X的类型确定,2.2.2 算术运算指令,40,2.2指令系统,加法类指令不加进位位的加法指令下面的指令无法确定操作数的类型,汇编时将报告错误: ADDSI, 5;两个操作数都没有明确类型如果目的操作数是DS:SI指向的字节存储单元,可以修改如下: ADDBYTE PTR SI, 5说明:加法指令执行后,状态标志CF, OF, ZF, SF, PF, AF按照运算结 果被刷新;操作数可以是8位/16位,源操作数与目的操作数应该有相 同的类型,不能同时为内存操作数。,2.2.2 算术运算指令,41,2.2指令系统,加法类指令不加进位位的加法指令ADD指令有五种形式:ADD REG, REG ;REGREG+REGADD REG, MEM ;REGREG+MEMADD REG, IMM ;REGREG+IMMADD MEM, REG ;MEMMEM+REGADD MEM, IMM ;MEMMEM+IMM,2.2.2 算术运算指令,42,2.2指令系统,加法类指令加进进位的加法指令ADC指令格式:ADC DST, SRC指令操作: DSTDST+SRC+CF 该指令与ADD的唯一不同是,除源和目的操作数相加外,还要加上进位位CF的现行值。其五种指令形式与ADD相似,对标志位影响同ADD。指令用途:用于多字节加法运算。,2.2.2 算术运算指令,43,2.2指令系统,例2-2-2-1: X=33445566H, Y=89ABCDEFH, 计算Z=X+Y(对应的数据段已经定义,变量X,Y,Z用DD定义) MOV AX, WORD PTR X;取X的低16位,送入AX ADD AX, WORD PTR Y;X,Y的低16位相加 ;(AX)=5566H+0CDEFH=2355H, CF=1 MOV WORD PTR Z, AX;低16位的和送Z的低16位 MOV AX, WORD PTR X+2;取X的高16位,送入AX ADC AX, WORD PTR Y+2 ;X, Y的高16位及低位进位相加 ;(AX)=3344H+89ABH+CF=0BCF0H, CF=0 MOV WORD PTR Z+2, AX;高16位的和送Z的高16位,2.2.2 算术运算指令,44,2.2指令系统,增量指令INC指令格式:INC DSRC 指令操作: DSRCDSRC+1 DSRC既表示源操作数,也表示目的操作数。两种形式 :INC REG; REGREG+1INC MEM; MEMMEM+1指令用途:主要用于修改偏移地址或计数次数 。,2.2.2 算术运算指令,45,2.2指令系统,增量指令INC指令实例:例2-2-2-2:假设COUNT为字变量INCBX ;BX(BX)+1INC COUNT SI ; COUNTSI 字单元;内容加1INC BYTE PTR COUNT SI ; COUNTSI字节单元; 内容加1INC 指令影响标志位ZF、SF、OF、PF和AF。影响的结果同ADD。但INC指令对进位标志CF没有影响,保持该指令执行前的状态。,2.2.2 算术运算指令,46,2.2指令系统,增量指令INC指令说明: INC指令的操作数只能是寄存器或存储器。当使用存储器操作数时,不得出现二义性。例2-2-2-3 指令INC SI 是非法指令 原因:不能确定SI是字还是字节存储器操作数,出现二义性 可改写为:INC BYTE PTR SI 或:INC WORD PTR SI,2.2.2 算术运算指令,47,2.2指令系统,减法类指令 三种:不减借位位的减法指令、减借位位的减法指令和减量指令。 指令格式:SUB DST, SRC ;DSTDST-SRCSBB DST, SRC ;DSTDST-SRC-CFDEC DSRC ;DSRCDSRC-1指令说明:这三种指令除进行减法外,其指令形式、操作数、使用注意事项都与相应的加法类指令相同,对标志位的影响除将进位改为借位外,前两种指令与ADD相同,DEC指令与INC相同。,2.2.2 算术运算指令,48,2.2指令系统,减法类指令 指令实例:例2-2-2-4:SUB AX, BX ;AX(AX)-(BX)SBB BX SI, AX ;BX+SI+1、BX+SI BX+SI+1、BX+SI-(AX)-CFDEC DATA1DI; DATA1DI DATA DI-1非法指令:SBB BX, 5 SI ;两个操作数都是存储器SUB AX, BH;两个操作数不匹配DEC BP;操作数出现二义性,2.2.2 算术运算指令,49,2.2指令系统,减法类指令 指令实例:例2-2-2-5: SUB AX, SI ;AX(AX)(SI),16位运算 SUB Y, 20H ;Y(Y)20H,运算位数由Y的类型确定 SBB AL, CL ; ALAL-CL-CF 用于多字节减法。 DEC CX;CX(CX) 1,16位运算,2.2.2 算术运算指令,50,取负指令格式:NEG 目的操作数 功能:目的操作数0目的操作数目的操作数:8/16位的寄存器/存储器例:NEG Z;ZZ,运算位数由Z的类型确定由于对一个操作数取补码相当于0减去此操作数,所以该指令的操作等效于: 目的操作数目的操作数求补此指令影响标志位:AF、CF、OF、PF、SF、ZF。通常使CF=1;只有当操作数为0时,CF=0。,2.2指令系统,2.2.2 算术运算指令,NEG AX ;将AX中的数取负(正负,负正),按位求反加1。NEG BYTE PTRBX;对数据中位于BX偏移地址处的字节内容取负。例:NEG AL ADD AL,100 ;这两条指令实现(100-AL)的运算。,51,2.2指令系统,算术比较指令CMP(Compare, 比较)指令指令格式:CMP目的操作数,源操作数目的操作数:8位/16位的寄存器/存储器操作数。源操作数:与目的操作数同类型的寄存器/存储器/立即数。功能:目的操作数-源操作数,保留运算产生的标志位,不保留运算的差。用来比较两个数之间的关系,由影响的标志位状态来判断两个操作数比较的结果。,2.2.2 算术运算指令,52,2.2指令系统,算术比较指令CMP目的操作数,源操作数1、比较两个数是否相等:不论是无符号数比较还是有符数比较,若在比较指令后,ZF=1则两者相等,否则不等。2、对于无符号数比较,则可根据进位标志CF的状态来判断: CF=0,目的操作数源操作 ; CF= 1, 目的操作数源操作数,2.2.2 算术运算指令,53,2.2指令系统,算术比较指令CMP目的操作数,源操作数3、对于有符号数比较则根据SF和OF两个标志的关系来判断: 两个有符号数比较时,有符号数的最高位表示符号,而符号标志SF总是和结果的最高位相同,所以,当两个正数相比较或两个负数相比较时,可以用SF来判断目的操作数比源操作数大还是小。(这时不会产生溢出,OF=0) 如果SF为0,则目的操作数源操作数, OFSF= 0 如果SF为1,则目的操作数源操作数, OFSF= 1例: (+6)-(+5)0 SF=0 (+6)(+5), (+5)-(+6)0 SF=0 (-5)(-6),2.2.2 算术运算指令,54,2.2指令系统,算术比较指令CMP目的操作数,源操作数 如一个为正数,另一个为负数,当两者相比较或相减时,可能会出现这样的情况:如目的操作数为127,源操作数为-50,显然目的操作数大。127-(-50)=177,但是在计算机中运算时为:,2.2.2 算术运算指令,=79,正确结果177已经超出了8位所能表示的有符号数的范围-128+127,产生了溢出,因此OF=1,且SF=1 则: OFSF= 0, 目的操作数源操作数反之目的操作数为-50,源操作数为127,显然目的操作数小。 -50-(+127)=-177计算机计算时会使得SF=0且OF=1 则 OFSF= 1, 目的操作数源操作数,55,2.2指令系统,算术比较指令CMP目的操作数,源操作数3、对于有符号数比较则根据SF和OF两个标志的关系来判断: OFSF= 0, 目的操作数源操作数 OFSF= 1, 目的操作数源操作数 OF=0时,SF为正确的结果符号 OF=1时,SF与正确的符号位相反 OFSF的运算结果反映了正确的结果符号,2.2.2 算术运算指令,56,2.2指令系统,算术比较指令CMP目的操作数,源操作数3、对于有符号数: OFSF= 0, 目的操作数源操作数 OFSF= 1, 目的操作数源操作数例:假设存储器字节变量(X)= 80H,指令“CMP X, 5”执行后:ZF=0(X) 5OF=1 减法操作产生溢出,SF是错误的结果符号位SF=0 如果X中存放的是有符号数,X5 ( 由于ZF=0,所以不相等),2.2.2 算术运算指令,57,2.2指令系统,乘法类指令无符号数乘法指令(unsigned MULtiply)指令格式:MUL SRC 指令功能:把源操作数和累加器中的数都当成无符号数,然后将两数相乘。源操作数可以是字节或字。 如果源操作数是一个字节,它与累加器AL中的内容相乘,乘积为双倍长的16位数,高8位送到AH,低8位送AL。即字节乘:AX(AL)*字节SRC,2.2.2 算术运算指令,58,2.2指令系统,乘法类指令无符号数乘法指令(unsigned MULtiply)指令格式:MUL SRC 指令功能:把源操作数和累加器中的数都当成无符号数,然后将两数相乘。源操作数可以是字节或字。 如果源操作数是一个字,它与累加器AX中的内容相乘,乘积为双倍长的32位数。 高位字(16位)送到DX,低位字(16位)送AX。即字乘:(DX,AX)(AX)*字SRC,2.2.2 算术运算指令,59,2.2指令系统,乘法类指令无符号数乘法指令(unsigned MULtiply)指令格式:MUL SRC 指令功能:把源操作数和累加器中的数都当成无符号数,然后将两数相乘。源操作数可以是字节或字。字节乘:AX(AL)*字节SRC字乘: DX,AX(AX)*字SRC。指令说明:SRC只能是寄存器或存储器操作数,可以是字节或字。但不能是立即数。当SRC为存储单元时必须在操作数前说明数据类型。,2.2.2 算术运算指令,60,2.2指令系统,乘法指令的形式为:MUL REG/MEM指令实例:例 2-2-2-8设AL=55H,BL=14H 计算乘积MUL BL结果:AX=06A4H,因为AH0,高位部分有效,则将CF=1 OF=1MUL BX ;DX,AXAX*BXMUL WORD PTR BX; DX,AXAX*BX+1、BXMUL BYTE PTR DI; AXAL*DI乘法指令对标志位的影响:指令执行后,若结果的高半部分(字节相乘时为AH,字相乘时为DX)不为零,则CF=OF=1,否则两者均为零。当CF=OF=1时,标志着结果的高半部分含有结果的有效位。标志位PF、SF、ZF、AF处于随机状态。,2.2.2 算术运算指令,61,2.2指令系统,有符号整数乘法指令(Signed Integer MULtiply)指令格式:IMUL SRC 指令操作及说明:该指令除下述两点外,其余同MUL。SRC为有符号整数,若是字节操作数,则范围为-128+127;若是字,则范围为-32768+32767。相应的AL、AX同样也是有符号整数。对CF、OF的影响不同。若结果的高半部分不是低半部分的符号扩展,则CF=OF=1,否则为零,通过CF或OF的状态,能判断高半部分是否含有结果的有效位。,2.2.2 算术运算指令,62,2.2指令系统,有符号整数乘法指令(Signed Integer MULtiply)说明:两个N位操作数相乘,得到2N位的乘积;源操作数不能为立即数;如果乘积高N位为低N位的符号扩展,则CF=OF=0,否则 CF=OF=1,其余标志位无意义。 相同的两组二进制代码分别用MUL和IMUL运算,可能得到不 同的结果:例 2-2-2-10:(AL) = 0FFH, (X) = 2MUL X ;(AX) = 01FEH,(2552 = 510) CF=1,OF=1IMUL X ;(AX) = 0FFFEH,(12 = 2) CF=0,OF=0,2.2.2 算术运算指令,63,2.2指令系统,除法类指令1、DIV(Unsigned Division):无符号除法格式:DIV 源操作数源操作数:8位/16位的寄存器/存储器功能:对两个无符号二进制数进行除法操作。源操作数可以是字或字节。 如果源操作数为字节,16位被除数必须放在AX中,与8位源操作数相除之后,8位商存在AL中,余数存在AH中。即 8位源操作数时: (AX)源操作数,AL商,AH余数若是被除数只有8位,必须把它放在AL中,并将AH清0,然后相除。所有标志位均无定义。,2.2.2 算术运算指令,64,2.2指令系统,除法类指令1、DIV(Unsigned Division):无符号除法格式:DIV 源操作数源操作数:8位/16位的寄存器/存储器 如果源操作数为字,32位被除数必须放在DX,AX中,其中DX为高16位,16位除数作源操作数,相除之后,16位商存在AX中,余数存在DX中。即16位源操作数时:(DX, AX)源操作数,AX商,DX余数 要是被除数只有16位,除数也是16位,则必须将16位被除数送到AX中,再将DX寄存器清0,然后相除。所有标志位均无义。,2.2.2 算术运算指令,65,2.2指令系统,除法类指令1、DIV(Unsigned Division):无符号除法格式:DIV 源操作数8位源操作数时: (AX)源操作数,AL商,AH余数16位源操作数时:(DX, AX)源操作数, AX商,DX余数例 2-2-2-11:要进行除法(AX)(BX),假设AX、BX内均为无符号数:MOVDX, 0;32位被除数高16位清零DIVBX;(DX, AX)BX,AX商,DX余数,2.2.2 算术运算指令,66,2.2指令系统,除法类指令1、DIV(Unsigned Division):无符号除法例如,要进行除法(AX)5,首先应确定是 16位8位还是 32位16位:如果能确定(AX)5的商小于255,可以执行16位8位除法: MOV BL, 5;除数存入BL寄存器 DIV BL;16位8位,AL商,AH余数如果不能确定(AX)5的商小于255,可以执行32位16位除法: MOV BX, 5;除数存入BX寄存器 MOV DX, 0;32位被除数高16位清零 DIV BX;(DX, AX)BX,AX商,DX余数,2.2.2 算术运算指令,67,2.2指令系统,除法类指令2、IDIV(Signed Integer Division):有符号数除法格式:IDIV源操作数源操作数:8位/16位的寄存器/存储器功能: 8位源操作数时:(AX)源操作数,AL商,AH余数16位源操作数时:(DX, AX) 源
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 毕业论文答辩跨系
- 计算机系毕业论文和设计
- 道路运输两类人员安全员考试模拟试题及答案
- 2025年新生儿护理查房
- 2025年物体打击应急演练脚本范文
- 2025年上肢骨折护理记录范文
- 2024社区《网格员》考前冲刺卷(含答案)
- 毕业论文大数据与会计专业
- 生殖门诊核心制度与应急预案试题(附答案)
- 高压线路带电检修考试模拟题与答案
- 2025年部编版道德与法治新教材二年级上册全册教案设计(共4个单元含教学计划)
- 2024年福建投资集团招聘真题
- 2025年乡村方面的面试题及答案
- 2025年26道医院财务科岗位面试真题及答案
- 农业机械无人驾驶协同系统接口设计与数据交换规范
- 2025年“才聚齐鲁成就未来”山东黄金集团井下技能工人招笔试高频考点题库考试试题【含答案】
- 研发样品管理办法
- 儿科护理实习出科理论考试试题及答案
- 婴幼儿心理健康发展指南
- 2025年安徽省合肥市庐江县柯坦镇葛庙小学小升初数学试卷
- 2025年四川乐山市中区物理高一下期末调研试题含解析
评论
0/150
提交评论