两数相除想减sub指令操作,不能减怎么办?

君,已阅读到文档的结尾了呢~~ 三菱PLC SUB减法指令指令代码、操作数 扫扫二维码,随身浏览文档 手机或平板扫扫即可继续访问 三菱PLC SUB减法指令指令代码、操作数 举报该文档为侵权文档。 举报该文档含有违规或不良信息。 反馈该文档无法正常浏览。 举报该文档为重复文档。 推荐理由: 将文档分享至: 分享完整地址 文档地址: 粘贴到BBS或博客 flash地址: 支持嵌入FLASH地址的网站使用 html代码: &embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed& 450px*300px480px*400px650px*490px 支持嵌入HTML代码的网站使用 您的内容已经提交成功 您所提交的内容需要审核后才能发布,请您等待! 3秒自动关闭窗口当前位置: >> 第二章 微机原理汇编语言指令系统(2) 南京理工大学自动化学院2011年 11月 1 二、算术运算指令提供加、减、乘、除四种基 本算术操作。这些操作都可用于字节或字的 运算,也可以用于带符号数与无符号数的运 算。 带符号数用补码表示。 同时也提供了各种校正操作, 故可以进行十进制算术运算。
2 1、加法指令(1)不带进位的加法格式: ADD OPRD1, OPRD2功能:(OPRD1) + (OPRD2)?OPRD1结果影响标志位ADD dest , src ;加法:dest←dest+src;ADD指令使目的操作数加上源操作数, 和的结果送到目的操作数 3 例:mov ax,7348h add al,27h;AL=48H+27H=6FH,AX=736FH ;OF=0,SF=0,ZF=0,PF=1,CF=0 ;AX=7348Hadd ax,3fffh;AX=736FH+3FFFH=B36EH;OF=1,SF=1,ZF=0,PF=0,CF=04 (2)带进位的加法格式:ADC OPRD1, OPRD2功能:(OPRD1) + (OPRD2)+CF?OPRD1结果影响标志位ADC dest , src;加法:dest←dest+src+CF ;ADC指令除完成ADD加法运算外,还要 加上进位CF,结果送到目的操作数 5 (3)增量指令 格式:INC OPRD 功能:(OPRD) +1?OPRD不影响CF, 影响AF, OF,PF, SF和ZFINC reg/mem ;增量(加1):reg/mem←reg/mem+1MOV AL, 0FFHINCINCAL[BX]; ZF=16 2. 减法指令(1)不带借位的减法格式: SUB OPRD1, OPRD2功能: (OPRD1)-( OPRD2)? OPRD1结果影响标志位SUB dest ,src ;减法:dest←dest-src ;SUB指令使目的操作数减去源操 作数,差的结果送到目的操作数 7 AX=B36EH sub ah,0f0h;AH=B3H-F0H=C3H,AX=C36EH ;OF=0,SF=1,ZF=0,PF=1,CF=1mov word ptr[200h],0ef00h;[200H]=EF00H,标志不变 sub [200h],ax ;[200H]=EF00H-C36EH=2B92H ;OF=0,SF=0,ZF=0,PF=0,CF=0sub si,si;SI=0;OF=0,SF=0,ZF=1,PF=1,CF=0 (2)带借位的减法格式: SBB OPRD1, OPRD2功能: (OPRD1)-(OPRD2)-CF?OPRD1结果影响标志位SBB dest,src ;减法:dest←dest-src-CF ;SBB指令除完成SUB减法运算 外,还要减去借位CF,结果送到 目的操作数 9 例:无符号双字加法和减法mov ax,7856h mov dx,8234h add ax,8998h adc dx,1234h sub ax,4491h sbb dx,8000AX=7856H ;DX=8234H ;AX=01EEH, ;DX=9469H, ;AX=BD5DH, ;DX=1468H,CF=1 CF=0 CF=1 CF=0DX.AX=H+H-H =1468 BD5DH主要用于无符号多字节的加法和减法运算 (3) 减量指令 格式: DEC OPRD功能:(OPRD)- 1?OPRD不影响CF, 影响AF, OF, DEC reg/mem;减量(减1):reg/mem←reg/mem-1 ? INC指令和DEC指令是单操作数指令PF, SF和ZF? 与加法和减法指令实现的加1和减1不同的是: INC和DEC不影响CF标志 11 inc si dec byte ptr [si];si←si+1 ;[si]←[si]-1单操作数指令中操作数无法区分字量还是 字节量时一定要有显式说明。 MOV CX, 1DECCX;CX=0,ZF=112 (4)求补指令 格式:NEG OPRD; 对操作数取补码后送回 功能:0 C(OPRD)? OPRD指令影响标志位AF,CF,OF,PF,SF和ZF, 此指令执行时, 只有当操作数为0时, CF为0, 否则CF总为1。NEG reg/mem ;reg/mem←0-reg/mem NEG指令对操作数执行求补运算,即用零减 去操作数,然后结果返回操作数。NEG指令也是一个单操作数指令! 13 例:mov ax,0ff64h neg al ;AL=0-64H=9CH,AX=FF9CH ;OF=0, SF=1,ZF=0,PF=1,CF=1 sub al,9dh ;AL=9CH-9DH=FFH,AX=FFFFH ;OF=0,SF=1,ZF=0,PF=1,CF=1 neg ax ;AX=0-FFFFH=0001H ;OF=0,SF=0,ZF=0,PF=0,CF=1 DEC指令 dec al ;AL=01H-1=0,AX=0000H 不影响CF 1 ;OF=0,SF=0,ZF=1,PF=1,CF=? neg ax ;AX=0-0=0 ;OF=0,SF=0,ZF=1,PF=1,CF=0 (5)比较指令 格式:CMP OPRD1, OPRD2 功能:(OPRD1) - (OPRD2) 不送回结果,只影响标志位 比较结果影响标志位AF,CF,OF,PF,SF和ZF。CMP dest,src;做减法运算:dest-src 差值不回送目的操作数标志FR;CMP指令将目的操作数减去源操作数,但? 比较指令通过减法运算影响状态标志,用于比较两个操作 15 数的大小关系 比较指令主要用于比较两个数之间的关系若两者相等,相减以后结果为零,ZF标志 为1,否则为0。cmp ax,bx cmp al,100 大小的比较(假设CMP AX,BX)对无符号数,若结果没有产生借位(CF=0),则 AX≥BX;若产生了借位(CF=1),则AX<BX。 对带符号数,则可根据OF与SF异或运算的结果 来 判 断 , 结 果 为 1 , 则 AX&BX , 结 果 为 0 , 则 AX≥BX 16 加法和减法指令总结? 加法指令:ADD, ADC和INC ? 减法指令:SUB, SBB, DEC, NEG和CMP ? 他们分别执行字或字节的加法和减法运算, 除INC和DEC不影响CF标志外,其他按定 义影响全部状态标志位 ②段寄存器不能做运算指令的操作数 ? 操作数组合:运算指令助记符 reg, imm/reg/mem 运算指令助记符 mem, imm/reg ①目的操作数和源操作数不能同时为存储单元操作数 17 3.乘法指令 ? 乘法指令分无符号和有符号乘法指令MUL reg/mem ;无符号乘法 IMUL reg/mem ;有符号乘法18 约定:1) 两个8位数相乘,有一个乘数在AL中,另一个乘数在寄存器或内存中,乘积在AX中;2) 两个16位数相乘,有一个乘数在AX中,另一个乘数在寄存器或内存中,乘积的高16位在DX中,低16位在AX中。3) 乘法有带符号数和无符号数两套指令 19 MUL r8/m8? ;无符号字节乘法:AX←AL×r8/m8? MUL r16/m16? ;无符号字乘法:DX.AX←AX×r16/m16? IMUL r8/m8? ;有符号字节乘法:AX←AL×r8/m8? IMUL r16/m16? ;有符号字乘法:DX.AX←AX×r16/m16 20 乘法运算时,结果影响CF和OF。 AF, PF, SF, ZF标志位无意义。 对MUL指令:当乘积的高半部分不为0,CF=1, OF=1;否则,CF=0, OF=0 。 CF=1, OF=1表示高半部 对IMUL指令:分包含有结果的有效数当乘积的高半部分是低半部分最高位的扩展, 乘积的高半部分每位与低半部分最高位相同时: CF=0, OF=0;否则,CF=1, OF=1 。 例:MOV AL, 0FBHMOV IMUL BH, BH 02H;表示有符号数是-5;表示有符号数是2结果:AX=0FFF6H, 即-10, CF=0, OF=0MOV AL, 0FBHMOV MUL BH, BH 02H;表示无符号数是251;表示无符号数是2结果:AX=01F6H, 即502, CF=1, OF=1 例:字节数据乘法:A5H×64H? mov al, 64h? ; AL=64H,表示无符号数是100、有符号数也是100? mov bl, 0a5h? ; BL=A5H,表示无符号数是165、有符号数则是-91? mul bl? ;无符号字节乘法:AX=4074H,表示16500; OF=CF=1,说明AX高8位含有有效数值,不是符 号扩展 例:字节数据乘法:A5H×64H ? mov al, 64h? ; AL=64H,表示无符号数是100、有符号数也是100? mov bl, 0a5h? ; BL=A5H,表示无符号数是165、有符号数则是-91? imul bl? ;有符号字节乘法:AX=DC74H,表示-9100; OF =CF=1,说明AX高8位含有有效数字,不是符号 扩展 4. 除法指令(1)无符号除法(两条) ? DIV r8/m8 (16位除8位)? 无符号字节除法: ? 隐含第一操作数AX AL←AX÷r8/m8的商AH←AX÷r8/m8的余数DIV r16/m16;无符号字除法:(32位除16位)AX←DX.AX÷r16/m16的商 DX←DX.AX÷r16/m16的余数隐含第一操作数DX.AX 25 (2)有符号除法(两条) IDIV r8/m8 (16位除8位) 有符号字节除法: AL←AX÷r8/m8的商AH←AX÷r8/m8的余数隐含第一操作数AXIDIV r16/m16 (32位除16位) 有符号字除法:AX←DX.AX÷r16/m16的商DX←DX.AX÷r16/m16的余数隐含第一操作数DX.AX 26 ? 除法指令使状态标志没有定义,但是却可能产生溢出。当被除数远大于除 数时,所得的商就有可能超出它所能 表达的范围。如果存放商的寄存器 AL/AX不能表达,便产生溢出, 8086CPU中就产生编号为0的内部中断 (INT 0)称为“除法错”中断 对DIV指令,除数为0,或者在字节除时商超过 8位,或者在字除时商超过16位,则发生除法溢 出。对IDIV指令,除数为0,或者在字节除时商 不在-128-127范围内,或者在字除时商不在- 范围内,则发生除法溢出。?规定IDIV指令运算结果中商的符号 与代数规则相同,余数的符号与被除数相同。当8位数除以8位数,16位数除以16位数时,必 须对被除数进行扩展。 (3)符号扩展指令? 符号扩展是指用一个操作数的符号位(最高位) 形成另一个操作数,后一个操作数的高位是全0 (正数)或全1(负数)? 符号扩展虽然使数据位数加长,但数据大小并没 有改变,扩展的高部分仅是低部分的符号扩展? 符号扩展指令有两条,用来将字节转换为字,字 转换为双字 CBW ;AL符号扩展到AH(Byte→Word)CWD;AX符号扩展到DX (Word→Dword) 符号扩展指令常用来获得有符号数的倍 长数据。 例如,有符号除法的倍长于除数的被除 数。 对无符号数应该采用直接使高8位或高 16位清0的方法,获得倍长的数据 30 符号扩展指令:字节扩展到字CBW;将寄存器AL中的符号位扩展到寄存器AH7 AH 0 7 AL 0CBW 字扩展到双字CWD;将寄存器AX中的符号位扩展到寄存器DX15 DX 0 15 AX 0CWD符号扩展指令隐含操作数只能是AL、AX。 符号扩展例mov al,64h ;AL=64H (机器数) ,表示10进制数100(真值) cbw ;将符号0扩展,AX=0064H,仍然表示100 mov ax,0ff00h ;AX=FF00H,表示有符号10进制数-256 cwd ;将符号位“1‖扩展,DX.AX=FFFFFF00H;仍然表示-256 5.十进制调整指令BCD码:用二进制形式表示的十进制码。每一位十进制数 用4位二进制表示,运算规则是逢十进一。1. 压缩BCD码: 一个字节中有两 位BCD码 2. 非压缩BCD码:一个字节只用 低4位表示一位BCD码,高4位 为0。 00 0101 BCD码运算时,先用一般的二进制 运算,然后再进行BCD码调整。十进制 BCD码 0 12 3 4 5 6 7 8 900 11 5.十进制调整指令? 十进制数调整指令对二进制运算的结果进行 十进制调整,以得到十进制的运算结果,以 此实现十进制BCD码运算 ? 8086指令系统支持两种BCD码调整运算?压缩BCD码就是通常的8421码;它用4个二进制 位表示一个十进制位,一个字节可以表示两个 十进制位,即00~99?非压缩BCD码用8个二进制位表示一个十进制位, 只用低4个二进制位表示一个十进制位0~9,高 4位任意,通常默认为0 34 编码的比较 真值(十进制) 二进制编码 压缩BCD码 非压缩BCD码 ASCII码 8 08H 08H 08H 38H 64 40H 64H H? 压缩BCD码加减法调整指令 DAA DAS ? 非压缩BCD码加减乘除法调整指令 AAA AAS AAM AAD 35 1)压缩BCD码十进制调整指令压缩BCD 加法(1)加法十进制调整DAA;执行的操作:这条指令执行前必须先执行ADD 或ADC指令,加法指令必须把两个两位的压缩BCD码 相加,并把结果存放在AL寄存器中。MOVADD DAAAL,15HAL,17H ; AL=2CH ; AL=32H36 调整的方法:?累加器AL低4位大于9或辅助进位标志位AF=1,则累加器AL加06H修正且AF置1 ?累加器AL高4位大于9或进位标志位CF=1,则累加器AL加60H修正且CF置1 。 ?如果同时满足,则累加器AL进行加66H修正且AF和CF置1 。例:进行BCD码加法运算59+68=127ADD+ 00 0001 + 5968 C1 66 127加法运算结果为C1,AF=1,高位大于9加66H进行BCD调整, CF=1,AF=1DAA1 (2) 减法十进制调整压缩BCD 减法DAS;执行的操作:这条指令执行之前,必须先执行SUB 或SBB指令,减法指令必须把两个两位的压缩BCD码 相减,并把结果存放在AL寄存器中。MOV SUB DAS AL,15H AL, 17H ; AL=FEH ; AL=98H38 说明:压缩BCD码加法或减法十进制调整指令必须 在ADD(ADC)或SUB(SBB)指令之后,且运 算结果保存在AL寄存器中,调整结果对标志 OF无影响,对其它状态标志位均有影响。 ?减法十进制调整方法与加法十进制调整方 法类同,只是将加6变为减6操作。39 2)非压缩BCD码十进制调整指令 指令格式:非压缩BCD 加法加法十进制调整减法十进制调整AAAAAS;;乘法十进制调整除法十进制调整AAM ;AAD ;40 (1)AAA指令 加法十进制调整将AL的内容变换成一位非压缩的十进制数。AAA检查 AL低四位,如低四位是0--9的数字且AF=0,AAA就清除AL 的高四位,以及AF和CF标志;如AL低四位表示的数大于9 或AF=1,AAA执行: ?加6到AL寄存器;?加1到AH寄存器; ?置AF=1,CF=1; ?清除AL高四位为0。(非压缩BCD规格化)例:ADD AL,BL AAA ;AL和BL中的数相加 ;非压缩BCD码调整MOV ADDAL, 07H AL, 05HAAA; AX: 0102H CF=AF=1 (2)AAS指令检查AL低四位,如低四位表示的数是0-9的 数字且AF=0 ,AAS清除AL高四位及CF和AF标志; 如AL低四位表示的数大于9或AF=1,AAS进行如下 调整:AL减去6;AH减去1;置AF=1,CF=1;清除AL中高四位。例:SUBAASAL,BL; (3)AAM指令AAM指令的作用是用10(0AH)来除AL 寄存器的内容,并将除得的商和余数分别 送到AH和AL来实现转换。例: MUL AAM BL ;AL×BL→AX (AH=0) ;调整后积的高位在AH中,低位在AL中。8位乘8位,积在AX中,由于乘数和被乘数都是非压缩 BCD数,积不会超过81,所以有效值只会在AL中,只需 对AL进行转换就可以了。 若积是51H(81),调整后: AH=08H,AL=01H (4)AAD指令? AAD ; AX←将AX中的非压缩BCD码扩展成二进制数? ; 调整操作:AL←10×AH+AL,AH←0? 非压缩BCD码除法调整指令 AAD与其他的调整指 令应用情况不同。它是先将存放在AX寄存器中的 两位非压缩 BCD码数进行调整,然后再用DIV指令 除以一个非压缩 BCD码数,这样得到非压缩BCD 码数的除法结果。其中,要求AL、AH和除数的高 4位为0。 ? AAM指令和AAD指令根据结果设置SF、ZF和PF, 但OF、CF和AF无定义 例:非压缩BCD码的乘法和除法运算mov ax, 0905h;AX=0905H,作为非压缩BCD码表示95 ; BL=08H,作为非压缩BCD码表示8 ;按照二进制数进行乘法,AL×BL→AX ;AX=05H×08H=0028Hmov bl, 08hmul blaam;按照非压缩BCD码进行调整:AX=0400H ;实现非压缩BCD码乘法:5×8=40mov bl,06h aad div bl; BL=06H,作为非压缩BCD码表示6 ; 进行二进制扩展:AX=40=0028H; 除法运算:商AL=06H,余数AH=04H; 实现非压缩BCD码除法:40=6×6+4 例:两位非压缩BCD数除一位非压缩BCD数MOV AX, 0300H;AX=0300H作为非压缩BCD码表示30MOVAADBL,05H; BL=05H,作为非压缩BCD码表示5; AX : 001EHDIVBL; AX : 0006H 三、逻辑运算和移位指令? 逻辑运算指令以二进制位为基本单位进行数据的 操作 ? 当需要对字节或字数据中的各个二进制位操作时, 可以考虑采用逻辑运算指令 ? 注意这些指令对标志位的影响1. 逻辑运算指令 AND OR XOR NOT TEST 2. 移位指令 SHL SHR SAL SAR 3. 循环移位指令 ROL ROR RCL RCR 47 1. 逻辑运算指令? 双操作数逻辑指令AND、OR、XOR和 TEST设置CF=OF=0,根据结果设置SF、 ZF和PF状态,而对AF未定义;它们的操作 数组合与ADD、SUB等一样: 运算指令助记符 运算指令助记符 reg, imm/reg/mem mem, imm/reg单操作数逻辑指令NOT不影响标志位,操作数 与INC、DEC和NEG一样: NOT reg/mem (1)逻辑非指令NOT对一个操作数执行逻辑非运算NOT reg/mem ;reg/mem←~reg/mem按位取反,原来 是“0”的位变为 “1”;原来是“1” 的位变为“0”注意:不影响标志位!!! 49 (2)逻辑与指令AND对两个操作数执行逻辑与运算,结果送目的操作数 AND dest,src ;dest←dest∧src只有相“与”的两位都是1, 结果才是1;否则,“与”的 结果为0 有 “ 0” 出 “ 0” , 全 “ 1” 出 “1”50 (3)逻辑或指令OR对两个操作数执行逻辑或运算,结果送目的操作数 OR dest,src ;dest←dest∨src只要相“或”的两位有一位是1, 结果就是1;否则,结果为0。 有“1”出“1”,全“0”出“0”51 (4)逻辑异或指令XOR对两个操作数执行逻辑异或运算,结果送目的操作数 XOR dest,src ;dest←destsrc只有相“异或”的两 位不相同,结果才是1; 否则,结果为0。 相同出0,不同出1。52 (5)测试指令TEST? 对两个操作数执行逻辑与运算,结果并不送目的操作数, 仅按AND指令影响标志。 ? 只影响标志SF 、 ZF 、 PF;CF=OF=0TESTdest,src;dest∧srcAND与TEST指令的关系, 同SUB与CMP指令的关系一样53 例:逻辑运算指令应用 mov al,75h ;AL=75H AND and al,32h ;AL=30H ;CF=OF=0, SF=0,ZF=0,PF=1 or al,71h ;AL=71H ;CF=OF=0,SF=0,ZF=0 ;PF=1 OR 01 XOR xor al,0f1h ;AL=80H ;CF=OF=0,SF=1,ZF=0 ;PF=0 NOT not al ;AL=7FH,标志不变 例: 逻辑运算指令的应用and bl,BL中D0和D3清0,其余位不变 or bl,BL中D0和D3置1,其余位不变 xor bl,BL中D0和D3求反,其余位不变AND指令可用于复位某些位(同0相与),不影响其他位 OR指令可用于置位某些位(同1相或),不影响其他位 XOR指令可用于求反某些位(同1相异或),不影响其他位 55 2. 移位指令? 将操作数移动一位或多位,分成逻辑移位 和算术移位,分别具有左移或右移操作 移位指令的第一个操作数是指定的被移位的 操作数,可以是寄存器或存储单元;后一个 操作数表示移位位数:该操作数为1,表示移动一位该操作数为CL,CL寄存器值表示移位位数 (移 位位数大于1时只能用CL表示)按照移入的位设置进位标志CF,根据移位后的 结果影响SF、ZF、PF。 (1)逻辑左移指令SHLSHL reg/mem,1/CL ;reg/mem左移1或CL位 ;最低位补0,最高位进入CF操作数CFMSBLSB0逻辑/算术左移指令SHL/SAL 57 (2)逻辑右移指令SHRSHR reg/mem,1/CL ;reg/mem右移1/CL位 ;最高位补0,最低位进入CF操作数0MSB逻辑右移指令SHRLSBCF59 (3)算术左移指令SALSAL reg/mem,1/CL ;与SHL是同一条指令操作数CFMSBLSB0逻辑/算术左移指令SHL/SAL 61 (4)算术右移指令SARSAR reg/mem,1/CL ;reg/mem右移1/CL位 ;最高位不变,最低位进入CF操作数MSB 算术右移指令SARLSBCF对无符号数,SHR是除2对有符号数,SAR是除262 例: 数据移位mov dx,6075h shl dx,1;DX=10101B0;DX=01010B CF ;CF=0,SF=1、ZF=0、PF=0 sar dx,1 ;DX=10101B ;CF=0,SF=1、ZF=0、PF=0 shr dx,1 ;DX=11010B ;CF=1,SF=0、ZF=0、PF=1 mov cl,4 ;CL=4,标志不变sar dx,cl;DX=00011B ;CF=1,SF=0、ZF=0、PF=164 例: 将AL寄存器中的无符号数乘以10xor ah,ah shl ax,1 mov bx,ax shl ax,1 shl ax,1 add ax,bx;实现AH=0,同时使CF=0 ;AX←2×AL ;BX←AX=2×AL ;AX←4×AL;AX←8×AL;AX←8×AL+2×AL=10×AL逻辑左移一位相当于无符号数乘以2 逻辑右移一位相当于无符号数除以2sub ah,ah and ah,0 3.循环移位指令? 循环移位指令类似移位指令,但要将从一 端移出的位返回到另一端形成循环。分为:ROL ROR RCL RCR reg/mem,1/CL reg/mem,1/CL reg/mem,1/CL reg/mem,1/CL ;不带进位循环左移 ;不带进位循环右移 ;带进位循环左移 ;带进位循环右移循环移位指令的操作数形式与移位指令相 同,按指令功能设置进位标志CF,但不影 响SF、ZF、PF、AF标志。逻辑运算指令、移位指令对标志的影响? 例:32位数据移位;将DX.AX中32位数值左移一位 shl ax,1 rcl dx,1考 虑 位 数 据 的 右 移 等 操 作32DXCFAX0 rcl dx,1 shl ax,1 例: 非压缩BCD码合并为压缩BCDDBCD05DL09 ;DBCD有2位非压缩BCD码 mov dl,dbcd ;取低字节 高 and dl,0fh ;只要低4位,CF=0 mov dh,dbcd+1 ;取高字节 mov cl,4 shl dh,cl ;低4位移到高4位 DH=90H or dl,dh ;合并到DLrol dh,cl rcl dh,cl 四、程序控制指令所有的程序控制转移类指令均不影响标志位 分为两种情况:JMP LL段内转移 段间转移段内转移: 目标指令与 转移指令在 同一代码段 中,只改变 IP的值CS:IP64KB内LL:新CS :IP JMP LLCS:IP 段间转移,目标指令 与转移指令分别在不 同的代码段,转移时 需要改变CS和IP的值可以超过 64KBLL:新CS:IP 1.无条件转移指令 格式: JMP OPRD功能:控制程序无条件转向由OPRD指向的 位置执行短程转移(SHORT) 直接转移 无条件转移指令 近程转移(NEAR) 远程转移(FAR) 段内间接转移 段间间接转移 73间接转移 (1)直接转移,分为三种情况: 短程:JMP SHORT OPRD近程:JMP NEAR PTR远程:JMP FAR PTROPRDOPRDOPRD通常以标号形式出现,NEAR为默认值可以省略。74 段内直接转移―近程转移(near)C 在当前代码段64KB范围内转移 ( ±32KB范围) C 不需要更改CS段地址,只要改变IP 偏移地址代 码 段段内直接转移―短程转移(short)转移范围可以用一个字节表达, 在段内-128~+127范围的转移段内直接转移中指令代码中提供目的地址是 相对于当前IP的位移量,转移到的目的地址 (转移后的IP值)就是当前IP值加上位移量。 代 码 段CS不变,IP=IP+位移量 ? 段间直接转移――远转移(far) C 从当前代码段跳转到另一个代码段, 可以在1MB范围 C 需要更改CS段地址和IP偏移地址 C 目标地址必须用一个32位数表达,叫 做32位远指针,它就是逻辑地址 指令代码中提供目的逻辑地址,转移 后的CS和IP值直接来自指令操作码 后给出的目的地址操作数(一个双字 的逻辑地址)其中高字送CS,低字送 IP。代 码 段代 码 段76 例:JMP JMP AGAIN FAR PTR DATCHG实际编程时,程序员只需写出要转移的目标地址 标号,汇编程序会根据目标地址的属性,自动处 理成短转移、近转移或远转移 程序员可用类型操作符short、near ptr 或far ptr 强制成为需要的转移类型77 (2)间接转移指令代码中给出寄存器或存储单 元,目的地址从寄存器或存储单 元中间接获得。78 1)段内间接转移:格式:JMP WORD PTR OPRD转移地址存放在内存单元中,转移指令后 给出的是内存单元的地址。JMP WORD PTR[SI] ;[DS:SI+1][DS:SI]?IP格式:JMPOPRDDS:SIIP;OPRD为寄存器名 JMP BX;(BX)?IP 2)段间间接转移:格式:JMP DWORD PTR OPRD转移地址存放在内存单元中,一般用寄存器间接寻址。JMPDWORD PTR [SI]DS:SI;DS:[SI+3][SI+2]?CSIP CSDS:[SI+1][SI]?IP (1) 直接短转移JMPSHORT PTR OPR当前IP值;(EB E7)段 内 例: JMP SHORT PTR START 直 接 (2) 段内直接转移 JMP NEAR PTR OPR;(E9 00 16) 转 移 操作:(IP) ← (IP)+ 16位位移量; 都 当前IP值 是 例: JMP START 相 对 (3)段内间接转移 JMP WORD PTR OPR; 转 移 操作:(IP) ← (有效地址) 例: JMP BX (E3) ; IP ← (BX) 寄存器间接转移 ( FF 67)操作:(IP) ← (IP)+ 8位位移量;JMP WORD PTR JTABLE[BX];IP ← (EA)存储器间接转移 (4)段间直接(远)转移 JMP FAR PTR OPR ; 指令代码: ( EA 46 01 00 30) 操作: (IP)← OPR的段内偏移地址; (CS)← OPR所在段的段地址; 例: JMP FAR PTR START1 (5)段间间接转移 JMP DWORD PTR OPR 指令代码: (FF EB) 操作: (IP)←(EA) ;存储器间接转移 (CS)←(EA+2) ; 例: JMP DWORD PTR JTABLE1[BX]各种存储器寻址方式给出的有效地址 设下列各转移指令的第一字节在内存中的地址为CS=2000H和 IP=016EH,且环境均为DS=6000H,BX=16C0H,(616C0H) =46H, (616C1H)=01H, (616C2H)=00H, (616C3H) =30H, (61732H)=70H, (61733H)=17H,写出下列各无 条件转移指令执行后CS和IP的值及转移类型。 各指令左首的16进制编码是该指令的机器码。指令中的目的地址 用相应的标号表示。 (1)EBE7 (2)E90016 (3)E3 JMP SHORT AGAIN0170H+FFE7H=0157HJMP NEAR PTR OTHER H=1771H JMP BXIP=16C0H(4)EA (5)FF67 (6)FFEBJMP FAR PTR PROB IP=0146H CS=3000HIP=1770H CS=2000HJMP WORD PTR 0072H[BX] JMP DWORD PTR [BX]IP=0146H CS=3000H 2.条件转移指令功能:根据条件来判断程序是否转移。 满足条件时程序转向指定位置执行, 128否则,程序顺序执行。 (注意:此时程序出现分支)? 只能转移到距当前指令JNZ LL127-128~127字节的范围内,即一个字节的补码范围; 84 ? 条件转移指令Jcc根据指定的条件确定程序 是否发生转移。其通用格式为:Jcc label;条件满足,发生转移 ;IP←IP+8位位移量; 当前IP值 ;否则,顺序执行? label是一个标号、一个8位位移量,表示Jcc指令 后的那条指令的偏移地址,到目标指令的偏移地 址的地址位移,8位位移量应扩展为字后与IP相加Jcc只支持短转移的相对寻址方式 85 ? Jcc指令不影响标志,但要利用标志。根据 利用的标志位不同,分成三种情况: ⑴ 判断单个标志位状态 ⑵ 比较无符号数高低 ⑶ 比较有符号数大小Jcc指令实际虽然只有16条,但却有30个助记符 采用多个助记符,目的是为了方便记忆和使用86 条件转移指令中的条件 cc助记符JZ/JE JNZ/JNE JS JNS JP/JPE JNP/JPO标志位ZF=1 ZF=0 SF=1 SF=0 PF=1 PF=0说明等于零/相等 不等于零/不相等 符号为负 符号为正 “1”的个数为偶数 “1”的个数为奇数JOJNOOF=1OF=0溢出无溢出87 条件转移指令中的条件 cc助记符JC/JB/JNAE JNC/JNB/JAECMP AX,BXJcc lable标志位CF=1 CF=0说明进位/低于/不高于等于 无进位/不低于/高于等于JBE/JNAJNBE/JACF=1或ZF=1CF=0且ZF=0低于等于/不高于不低于等于/高于JL/JNGEJNL/JGE JLE/JNG JNLE/JGSF≠OFSF=OF SF≠OF或ZF=1 SF=OF且ZF=0小于/不大于等于不小于/大于等于 小于等于/不大于 不小于等于/大于 1)判断单个标志位状态CMP AX,BXJcc lable⑴ JZ/JE和JNZ/JNE 利用零标志ZF,判断结果是否为零(或相等) ⑵ JS和JNS 利用符号标志SF,判断结果是正是负 ⑶ JO和JNO 利用溢出标志OF,判断结果是否产生溢出 ⑷ JP/JPE和JNP/JPO 利用奇偶标志PF,判断结果中“1”的个数是偶是 奇 ⑸ JC/JB/JNAE和JNC/JNB/JAE(高于等于) 利用进位标志CF,判断结果是否进位或借位 2)比较无符号数高低CMP AX,BXJcc lable? 无符号数的大小用高(Above)、低(Below)表示, 需要利用CF确定高低、利用ZF标志确定相等 (Equal) ? 两数的高低分成4种关系,对应4条指令JB(JNAE):目的操作数低于(不高于等于)源操作数(CF=1);JC JNB(JAE):目的操作数不低于(高于等于)源操作数(CF=0);JNC JBE(JNA):目的操作数低于等于(不高于)源操作数(CF ∨ ZF =1) JNBE(JA):目的操作数不低于等于(高于)源操作数(CF ∨ ZF=0)90 3)比较有符号数大小CMP JccAX,BX lable? 判断有符号数的大(Greater)、小(Less),需要组合OF、 SF标志、并利用ZF标志确定相等与否 ? 两数的大小分成4种关系,分别对应4条指令 JL(JNGE):目的操作数小于(不大于等于)源操作数(SFOF=1)减的结果为负(SF=1)且无溢出(OF=0)或 减的结果为正(SF=0)而有溢出(OF=1)JNL(JGE):目的操作数不小于(大于等于)源操作数 (SFOF=0 ) 减的结果为正(SF=0)且无溢出(OF=0)或减的结果为负(SF=1)但有溢出(OF=1)JLE(JNG):目的操作数小于等于(不大于)源操作数(SFOF)∨ZF=1JNLE(JG):目的操作数不小于等于(大于)源操作数(SFOF)∨ZF=0 91 条件转移指令常用来进行判断, 以实现程序分支:CMP JAE MOV JMP AL, NN DL, 1 DONE 0JNBNNNN:DONE:MOV……DL,0如果AL存放的是有符号数, 则条件转移指令应采用JGE指令程序执行完以后,若AL的值小于0,则DL=1,反之,则DL=0。?92 下面程序段在什么情况下执行的结果是AL=0BEGIN: IN TEST JZ XOR AL, AL, A1 AL, AL 0FFH 5FH 80HJMPA1: STOP: MOV HLTSTOPAL,当从5FH端口读到的数据的最高位为1时 93 从数据区BCDBUF开始存放着10个用非压缩BCD码表示的十进 制数,要求把它们分别转换成ASCII码后存入ASCBUF开始的 另一缓冲区。分析: BCD码转换成 ASCII码的方 法是: BCD码+30HLEA LEA MOV AGAIN: MOV OR MOV INC INC DEC JNZSI, BCDBUF DI, ASCBUF CX, 10 AL, [SI] ;取BCD码 AL, 30H ;转换 [DI], AL ;存 SI DI CX AGAIN94 3.循环指令? 一段代码序列多次重复执行就是循环 ? 8088设计有针对CX计数器的计数循环指令 LOOP label ;循环指令;首先CX←CX-1;然后判断;若CX≠0,转移JCXZ label;为0循环指令;如果CX=0,则转移? label 操作数采用相对短寻址方式 ? 还有LOOPZ/LOOPE和LOOPNZ/LOOPNE两条 指令 dec cx jnz label 95 (1)LOOP循环指令格式:LOOP label 功能:1) CX←CX-1 2) IF CX≠0则转label IF CX=0 则顺序执行.label 循环体 CX ←CX-1 LOOPNCX=0?Y96 (2)LOOPZ/LOOPE当为零或相等时循环指令格式:LOOPZ(或LOOPE) label 功能:1) CX←CX-1 2) IF CX≠0且ZF=1则转label CX=0或ZF=0则顺序执行.label 循环体 CX ←CX-1NZF=0? Y 不等NLOOPZCX=0? Y97 (3)LOOPNZ/LOOPNE当不为零或不相等时循环指令格式:LOOPNZ(或LOOPNE) label 功能:1) CX←CX-1 2) IF CX≠0且ZF=0则转label CX=0或ZF=1则顺序执行.98 (4) JCXZ label 测试CX的值为0则转移指令 功能:如果 CX=0 则转label 如果CX≠0 则顺序执行。YCX=0? N 循环体 CX-1→CXlabel在循环体内完成计数器CX的减一操作,在循环体 外判断是否循环,循环体可能一次都不执行。 99 例:数据块传送(字节) ds:sbuf=&es:dbuf(1kb)mov cx,400h;设置循环次数:1K=H mov si,( lea si, sbuf ) ;设置循环初值:SI指向数据段源缓冲区开始 mov di,( lea di, sbuf ) ;DI指向附加段目的缓冲区开始(附加段) mov al,[si] ;循环体:实现数据传送 mov es:[di],al ;每次传送一个字节 inc si ;SI和DI指向下一个单元again:inc di loop again;循环条件判定:循环次数减1,不为0转移(循环) 100 例: 数据块传送(字)mov cx,200h;设置循环次数:1K÷2=200Hmov si,offset sbuf;设置循环初值:SI指向数据段源缓冲区开始mov di,offset dbuf again:;DI指向附加段目的缓冲区开始(附加段) mov ax,[si] ;循环体:实现数据传送 mov es:[di],ax ;每次传送一个字 add si,2 ;指向下一个(字)单元add di,2 loop again; dec cx jnz again101;循环条件判定:循环次数减1,不为0转移(循环) 4.子程序调用和返回指令? 子程序是完成特定功能的一段程序 ? 当主程序(调用程序)需要执行这个功能时, 采用CALL调用指令转移到该子程序的起始 处执行 ? 当运行完子程序功能后,采用RET返回指令 回到主程序继续执行转移指令有去无回 子程序调用需要返回, 其中利用堆栈保存返回地址 102 主程序与子程序主程序 子程序CALL labelRET 回到CALL指令后的指令 处――返回地址 103 1)子程序调用指令CALL除了没有段内短调用 外其它同JMP? CALL指令分成4种类型(类似JMP) CALL label ;段内调用、直接寻址 CALL r16/m16 ;段内调用、间接寻址 CALL far ptr label ;段间调用、直接寻址 CALL far ptr mem ;段间调用、间接寻址 ? CALL指令需要保存返回地址: ? 段内调用――入栈偏移地址IP SP←SP-2,SS:[SP]←IP ? 段间调用――入栈偏移地址IP和段地址CS SP←SP-2,SS:[SP]←CS SP←SP-2,SS:[SP]←IP104 (1)段内直接调用格式: CALL label 执行的操作: SP←SP-2;(SP+1,SP)←IP; 当前IP值 IP←IP+D16;(2)段内间接调用在执行CALL指令 时IP的值已修改 为CALL下一条指 令在内存中的地 址,所以进栈保 护的是CALL指令 后面一条指令的 内存地址。格式: CALL label 执行的操作: SP←SP-2;(SP+1,SP)←IP; IP←(EA) 105 (3)段间直接调用 格式: CALL label 执行的操作: SP←SP-2; (SP+1,SP)←CS; 当前CS值 SP←SP-2; (SP+1,SP)←IP; 当前IP值 IP←偏移地址(指令的第2,3个字节); CS←段地址(指令的第4,5个字节)。 106 (4)段间间接调用 格式: CALL label 执行的操作: SP←SP-2; (SP+1,SP)←CS; 当前CS值 SP←SP-2; (SP+1,SP)←IP; 当前IP值 IP←(EA); CS←(EA+2)CALL指令寻找目的地址的方式与JMP指令基本相同 107 2)子程序返回指令RET? 根据段内和段间、有无参数,分成4种类型 RET ;无参数段内返回 RET N ;有参数段内返回 RET ;无参数段间返回 RET N ;有参数段间返回 ? 需要弹出CALL指令压入堆栈的返回地址 ? 段内返回――出栈偏移地址IP IP←SS:[SP], SP←SP+2 ? 段间返回――出栈偏移地址IP和段地址CS IP←SS:[SP], SP←SP+2 CS←SS:[SP], SP←SP+2 108 (1)段内返回RET;IP ← (SP+1,SP)SP ← SP+2 (2) 段内带立即数返回 RET N ;PUSH PUSH CALL … … ADDWR: … … RET 4 AX BX ADDWRIP ← (SP+1,SP)SP ← SP+2SP ← SP+N ;位移量 109 (3) 段间返回RET; IP ← (SP+1,SP) SP ← SP+2CS ← (SP+1,SP)SP ← SP+2110 (4)段间带立即数返回 RET N ; IP ← (SP+1,SP)SP ← SP+2CS ← (SP+1,SP)SP ← SP+2SP ← SP+N ;16位移量;0 & N& 65535的偶数。111 例: 十六进制转换为ASCII码的子程序;子程序:将DL低4位的一位16进制数转换成ASCII码htoascproc and dl,0fh or dl,30h cmp dl,39h jbe htoend add dl,7 htoend: ret htoasc endp;只取DL的低4位 ;DL高4位变成3 ;是0~9,还是0Ah~0Fh ? ;是0~9,转移 ;是0Ah~0Fh,加上7 ;子程序返回;主程序:调用子程序mov dl,28h call htoasc 112 5.中断指令和中断返回指令? 中断(Interrupt)是又一种改变程序执行 顺序的方法 ? CPU支持256个中断,每个中断用 一个编号(中断向量号)区别 ? 中断指令有3条: INT N IRET INTO ? 本节主要掌握类似子程序调用指令的中断 调用指令INT N,进而掌握系统功能调用 113 (1)中断指令一般格式: INT N ;中断调用指令:产生N号中断 ;主程序使用可实现软件中断,其中N表示中 断向量号,标志寄存器入栈。 (2)溢出中断指令 一般格式:INTO 功能: 对溢出情况进行中断响应; 114 ? 在执行溢出中断指令INTO时,若溢出标志 OF为1,则产生一个向量号为4的内部中断, 被称为溢出中断(INT 4)例如:mov ax,2000h add ax, 7000h ;2000H+7000H=9000H,溢出:OF=1 into ;因为OF=1,所以产生溢出中断115 (3)中断返回指令一般格式: IRET ;中断返回指令:实现中断返回 ;中断服务程序使用 ;比RET多了恢复标志寄存器内容的工作。116 五、串操作指令? 用一条指令实现对一串数据或字符的操作,字符或 数据的个数在CX中,每执行一次CX自动减1,直至 减到零串操作自动停止; ? 源操作数在DS:[SI]中,目的操作数在ES:[DI]中; ? 源操作数和目的操作数都在内存中,是唯一一条从 内存到内存的指令; ? DF=1,地址自动由高至低减量,进行串运算;DF=0, 地址自动由低至高增量,进行串运算。 117 五、串操作类指令? 8086的串操作类指令能对内存中一个连 续区域的数据(如数组、字符串等)进 行传送、比较等操作,指令有:1. 传送数据串:MOVS,STOS,LODS 2. 检测数据串:CMPS,SCAS 3. 重复前缀: REP,REPZ,REPNZ? ?串操作指令采用了特殊的寻址方式 利用循环程序也可以实现串操作指令的 功能118 说明:? 源操作数用寄存器SI间接寻址,默认在数据 段 DS中,即 DS : [ SI ] ,允许段超越。? 目的操作数用寄存器DI间接寻址,默认在附 加段 ES中,即 ES : [ DI ] ,不允许段超越。 ? 每执行一次串操作,源地址指针SI和目的地 址指针DI将自动修改:±1或±2119 ? 对于以字节为单位的数据串(指令助记符 用 B结尾)操作,地址指针应该±1? 对于以字为单位的数据串(指令助记符用 W结尾)操作,地址指针应该±2 ? 当DF=0(执行CLD指令),地址指针应 该+1或+2? 当DF=1(执行STD指令),地址指针应该 -1或-2 120 1.串传送指令MOVS实现对数据串的传送,可以配合REP重复前 缀,它们不影响标志。 串传送指令MOVS将数据段中的一个字节或 字数据,传送至附加段的主存单元:AL,[SI] MOV MOVSB ( MOVSB dest,src ) MOV ES:[DI],AL;字节串传送:ES : [ DI ]←DS : [ SI ];INC 然后: SI←SI±1,DI←DI±1 INCSI ;当DF=0 DI MOV AX,[SI] MOV ES:[DI],AX SI ;当DF=0MOVSW;字串传送: ES : [ DI ]←DS : [ SI ]; INC 然后: SI←SI±2,DI←DI±2 INCINCSIDI DI121INC 例:S1 S2DB DThis is a string!$‖ DB 18 DUP(0)MOV MOV MOV REP …. SI, OFFSET S1 DI, OFFSET S2 CX, 18 MOVSBMOV AX, DS MOV ES, AX执行完以后结果:S1 S2 DB DThis is a string!$‖ DB DThis is a string!$‖122 2. 存串指令STOS串存储指令STOS将AL或AX的内容存入附 加段的主存单元: STOSB ( STOSB dest );隐含源操作数AL;字节串存储: ES : [ DI ]←AL; 然后: DI←DI±1MOV ES:[DI],AL INC DI ;(DF=0)STOSW;字串存储: 然后: ES : [ DI ]←AX; DI←DI±2MOV ES:[DI],AX INC DI INC DI123 3. 取串指令LODS? 串读取指令LODS 将数据段中的一个字节或 字数据读到 AL或AX寄存器:LODSB(LODSB src);隐含目的操作数AL;字节串读取: AL←DS : [ SI ];MOV AL,[SI] INC SI然后: SI←SI±1LODSW;字串读取:然后:AX←DS : [ SI ];SI←SI±2MOV AX,[SI] INC SIINC SI124 MOV SI, OFFSET String MOV CX, xx MOV AH, 2 Next_Char: LODSB MOV DL, AL INT 21H LOOP Next_Char例:INT 21H ―― DOS系统功能调用 功能号AH=02H,显示一个字符,待显示的字符存入DL125 4.重复前缀指令REP重复前缀指令REP用在MOVS,STOS,LODS指 令前,利用计数器CX保存数据串长度,可以理解 为“当数据串没有(CX=0)结束,( CX≠0)则 继续传送”;REP; 每执行一次串指令,CX减1;直到CX=0, 重复 执行结束。注意:串操作指令本身仅进行一个数据的操 作,利用重复前缀才能实现连续操作。 126 5. 串比较指令CMPS? 串比较指令CMPS用源数据串减去目的数据 串,以比较两者间的关系: CMPSB (CMPSB dest,src) ;字节串比较:DS : [ SI ]-ES : [ DI ]; 然后:SI←SI±1,DI←DI±1 CMPSW ;字串比较: DS : [ SI ]-ES : [ DI ]; 然后: SI←SI±2,DI←DI±2 127 例:MOV MOV MOV REPZ JNZSI, OFFSET S1 DI, OFFSET S2 CX, xx CMPSB Not_EqualEqual: ……Not_Equal:…... 128 6.串搜索(扫描)指令SCAS? 串扫描指令SCAS用AL/AX内容减去目的数 据串,以比较两者间的关系: SCASB ( SCASB dest ) ;字节串扫描:AL-ES : [ DI ]; 然后: DI←DI±1 SCASW ;字串扫描: AX-ES : [ DI ]; 然后: DI←DI±2 129 例:MOV DI, OFFSET String MOV CX, xx MOV AL, ?h‘ REPNZ SCASB JNZ Not_Found Found: …… Not_Found:…...130 7.重复前缀指令 REPE(或REPZ)重复前缀指令 REPE(或REPZ) 用在CMPS、SCAS指令前,利用计数器CX保存数据 串长度,同时判断比较是否相等,可理解为“当数 据串没有结束( CX≠0),并且串相等(ZF=1), 则继续比较”。REPE / REPZ (相等重复) ;每执行一次串指令,CX减1;只有CX=0或 串结束 ZF=0,重复执行结束不相等 若串检测结束后ZF=0,则说明两个串中至少有一个数据不同。 131 8.重复前缀指令 REPNE(或REPNZ)重复前缀指令REPNE(或REPNZ) 用在CMPS、SCAS指令前,利用计数器 CX保存数据串长度,同时判断比较是否不 相等,可以理解为“当数据串没有结束 (CX≠0)并且串不相等(ZF=0),则继 续比较”。 REPNE /REPNZ(不等重复);每执行一次串指令,CX减1;只有CX=0或 ZF=1,重复执行结束。若串检测结束后ZF=1,则说明两个串中至少有一个数据相同。 132 1.假设AX和BX寄存器中存放的是带符号数,为了判别AX中的 数是否大于BX中的数,应采用下面哪一种指令序列: (A) SUB AX,BX (B)SUB AX,BX JC tag JNC tag (C) SUB AX,BX (D)SUB AX,BX JA tag JG tag2.在下列指令中,隐含使用AL寄存器的指令有几条: SCASB、XLAT、MOVSB、 DAA、NOP、MUL BH (A)1条 (B)2条 (C)4条 (D)5条133 3.下列四条指令中,错误的指令是: (A)MOV AL,CL (B)XCHG AL,BL (C)MOV AL,[BX] (D)AND AL,BX 4.下列四条指令都可以用来使累加器清“0”,但 其中不影响CF标志的指令是: (A)XOR AL,AL (B)AND AL,0 (C)MOV AL,0 (D)SUB AL,AL134 5. 已知SP=2000H,BX=283FH,指令CALL WORD PTR [BX]的内存地址是 01000H,指令机器码是FF17H,试问执行该指令后,堆栈栈顶单元的内容是: (A)28H (B)3FH (C)00H (D)02H6. 假定DS=4000H,DI=0100H,(40100H)=55H,(40101H)=AAH,执行指令 LEA BX,[DI]后,BX中的内容是: (A)AA55H (B)55AAH 。 (B)ZF=0 (C)CF=1 (D)OF=0135(C)0100H(D)4100H7. 设(AL)=-68,(BL)=86,执行SUB AL,BL指令后,正确的结果是: (A)SF=1 8.有下列指令:STR1STR2 CNTDB 16 DUP(?)DW ?CD? EQU 16MOV CX ,CNTMOV BX,STR2 执行完这些指令后,BX=(A)00CDH (B)00DCH (C)4344H (D)4443H136 9. 有下列指令: MOV AX ,1234H MOV CL,4 ROL AX,CL DEC AX MOV CX,4 MUL CX 执行完这些指令后,AL= (A) 60H (B)00H(C)04H( D)0AFH10. 下列4条指令中,有几条指令需要使用DX寄存器: MUL BX; DIV BL; IN AL,20H;LODSB; (A)1条 (B)2条 (C)3条 (D)4条 137 11. 执行下列程序段: MOV AX,1234H MOV BX,5678H ADD AL,BL DAA MOV CL,AL MOV AL,AH ADC AL,BH DAA 执行后,AL= (A)69 (B)78 (C)56(D)68138 12. 有下列程序段: AGAIN:MOV AL,[SI] MOV ES:[DI],AL INC SI INC DI LOOP AGAIN 下列指令中 可完成与上述程序段相同的功能。 (A)REP MOVSB (B)REP LODSB (C)REP STOSB (D)REPE SCANSB139 13. 执行下列程序段: MOV AX,0 MOV BX,1 MOV CX,100 AGAIN:ADD AX,BX INC BX LOOP AGAIN 执行后,BX= (A)99 (B)100 (C)101 (D)102 14.将字变量ARRAY偏移地址(EA)送入寄存器BX的正确指令是: (A)LEA BX,OFFSET ARRAY (B)MOV BX,OFFSET ARRAY (C)LES BX,OFFSET ARRAY (D)MOV BX,ARRAY 140 15. 假设V1和V2是用DW定义的变量,下列指令正确的是: (A)MOV AL,20H (B)MOV V2,V1 (C)MOV AL,V1 (D)MOV CS:[2000H],V2 16.若AX=0222H,CF、SF、ZF和OF的初始状态都是0,执行 指令:SUB AX,0FFFFH后,这4个状态标志位的状态是: (A) CF=0,SF=0,ZF=0,OF=0 (B) CF=1,SF=0,ZF=0,OF=0 (C) CF=0,SF=0,ZF=1,OF=1 (D) CF=1,SF=1,ZF=1,OF=1141 17.有下列指令: MOV AX ,1234H MOV CL,4 ROL AX,CL DEC AX MOV CX,4 MUL CX 执行完这些指令后,AL= (A) 60H (B)00H (C)04H(D)0AFH142 18.已知指令序列为: ADD AL,BL JNO L1 JNC L2 若AL和BL的内容有以下4组给定值,其中哪一组给定值使 该指令序列转向L2执行? (A)AL=05H,BL=0F8H (B)AL=81H,BL=0A2H (C)AL=68H,BL=74H (D)AL=0B6H,BL=87H 19.假设DST DW 1234H,5678H,执行LES DI,DWORD PTR DST指令之后,DI= ? (A)5678H (B)3412H (C)1234H (D)7856H 143 20.下列四条指令中,错误的指令是: (A)MOV AL,CL (B)XCHG AL,BL (C)MOV AL,[BX] (D)AND AL,BX 21.下列四条指令都可以用来使累加器清“0”,但 其中不影响CF标志的指令是: (A)XOR AL,AL (B)AND AL,0 (C)MOV AL,0 (D)SUB AL,AL144 22.已知SP=2000H,BX=283FH,指令CALL WORD PTR [BX]的内存地址是01000H,指令机器码是 FF17H,试问执行该指令后,堆栈栈顶单元的内 容是: (A)28H (B)3FH (C)00H (D)02H 23.假定DS=4000H,DI=0100H,(40100H)=55H, (40101H)=AAH,执行指令LEA BX,[DI]后, BX中的内容是: (A)AA55H (B)55AAH (C)0100H (D)4100H145 24.下面是一个单字节无符号二进制整数转换为BCD码的子程序.子程序的入口条件是:SI指向二进制数所在单元,转换结果以压 缩BCD码形式存放在SI+1和SI+2两个单元中,请选择正确答案.MOV AL,0MOV DL,2L1:INC SIMOV AL,[SI] ③ AL,ALMOV [SI+1],ALMOV [SI+2],AL MOV L2: CX, ①DAAMOV [SI],AL DEC DL ④ SUB LOOP L1 SI,2 L2146MOV BL,[SI] ② BL,1MOV [SI],BL ① ② ③(A) 2 (A) SHR (A) ADD(B) 4 (B) SHL (B) ADC(C) 8 (C) SAR (C) SUB(D)16 (D)ROL (D)SBB④(A) JZ(B) JNZ(C) JC(D)JNC147 25. 设有关寄存器及存储单元的内容如下:DS=2000H,BX=0100H,SI=0002H (20100H)=12H,(20101H)=34H,(20102H)=56H (20103H)=78H,(21200H)=2AH,(21201H)=4CH (21202H)=B7H,(21203H)=65H,试说明下列各条指令执行完后AX寄存器的内容。(1)MOV (3)MOV (5)MOV (7) MOVAX,1200H AX,[1200H] AX,1100H[BX] AX,1200H[SI](2)MOV (4)MOV (6)MOV (8) MOVAX,BX AX,[BX] AX,[BX][SI] AX,1100H[BX][SI]148 体系结构等基本硬件知识,掌握 8086CPU 的寻址方式,熟悉指令系统和汇编语言的基本...本章讲授要点: 1.1 微型计算机发展概况 1.2 微型计算机的特点与分类 1.3 ...微型计算机系统的功能越来越强,而关于计算机的 程序...一条汇编语言指令对应 一条机器语言代码,所以汇编...1 第二章 分析与设计 2.1 题目汇编显示杨辉三角 ...1/2 相关文档推荐 微机原理第二章练习题及解 12...指令系统是用来编制计算机程序的一个指令集合 B.静态...CX 寄存器在汇编语言程序中常用作() A.存放循环计...微机原理第二章练习题及解_管理学_高等教育_教育专区...汇编语言 B:机器语言 C:C 语言 D:JAVA 语言 ::...A:时间周期&指令周期&总线周期 B:时间周期&总线...答:CPU:中央处理器,是整个计算机系统的控制中心,主要功能是进行算术和逻辑运算,...汇编语言:使用助记符表示的二进制代码指令语言,是一种符号化的机器语言,必须 ...汇编语言 接口技术 65页 4下载券 微机原理习题答案(第二章... 21页 2下载券...答: 总线是微机系统之间、 系统各模块之间或模块内部以及芯片内部各部分之间用来...微机原理和汇编语言复习资料_工学_高等教育_教育专区...二进制数-8的补码 6.在微机系统中分析并控制指令...带符号数乘以2的操作可以用( )移位指令实现 A.SAL...微机原理及应用试题库(附答案) (2)_理学_高等教育...86 系列汇编语言指令语句格式中,标识符有效长度为 A...第一个数高 16 位 ;第一个数低 16 位 ;第二...分别用一条汇编语言指令完成如下功能: (1)把 BX 寄存器和 DX 寄存器的内容...微机原理习题答案(第二章... 21页 2下载券 第二章微机原理习题答案 4页 ...微机原理期末复习题目第一章 计算机基本知识 【复习...= 0 第二章 CPU 的引脚功能、系统组成...2、表达式的应用; 3、常用伪指令; 4、汇编语言... All rights reserved Powered by copyright ©right 。文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

更多关于 两数相除 的文章

 

随机推荐