其他分享
首页 > 其他分享> > 小白都能看懂的实验4 8086标志寄存器及中断

小白都能看懂的实验4 8086标志寄存器及中断

作者:互联网

实验四 8086标志寄存器及中断

四.实验内容

实验任务1

  1. 验证实验
    • 对于add指令,先输入相应的汇编代码,单步执行查看结果
      • 可以发现,add指令会对标志位ZF和CF产生影响
        • ZF位从NZ变成了ZR,表示运算结果为0
        • CF位从NC变成了CY,表示运算中最高位向更高位产生了进位
    • 对于inc指令,输入相应的汇编代码,单步执行查看结果
      • 可以发现,inc指令只会对ZF位产生影响, 对CF位不会产生影响
        • ZF位从NZ变为ZR,表示运算结果位0
        • CF位未发生变化
  2. 问答问题
    • 实验代码如下所示
    •  
       1 assume cs:code, ds:data
       2 
       3 data segment
       4    x dw 1020h, 2240h, 9522h, 5060h, 3359h, 6652h, 2530h, 7031h
       5    y dw 3210h, 5510h, 6066h, 5121h, 8801h, 6210h, 7119h, 3912h
       6 data ends
       7 code segment 
       8 start:
       9     mov ax, data
      10     mov ds, ax
      11     mov si, offset x
      12     mov di, offset y
      13     call add128
      14 
      15     mov ah, 4ch
      16     int 21h
      17 
      18 add128:
      19     push ax
      20     push cx
      21     push si
      22     push di
      23 
      24     sub ax, ax
      25 
      26     mov cx, 8
      27 s:  mov ax, [si]
      28     adc ax, [di]
      29     mov [si], ax
      30 
      31     inc si
      32     inc si
      33     inc di
      34     inc di
      35     loop s
      36 
      37     pop di
      38     pop si
      39     pop cx
      40     pop ax
      41     ret
      42 code ends
      43 end start

       

    • 回答问题
      • inc指令不能换成add指令,理由如下
        • 理论:
          • 我们知道, 在进行128位大整数加法时,需要用到adc指令
          • 而adc指令运算时会被CF标志位影响
          • 大整数加法时,adc中存储的应该是低几位(此题中是低16个二进制位)向更高位的进位
          • 而我们知道,inc指令不会影响CF标志位, add指令会影响CF标志位
        • 此题:
          • 此题是大整数加法, 所以进行加法运算时运用的是adc指令,会用到CF标志位的数值
          • 若使用了add si, 2和add di, 2指令, 则会对CF标志位产生影响
          • 进而影响到adc指令的执行结果
          • 最终影响到计算结果
          • 所以不能换成add指令
      • 在程序运行前, x(第一行)和y(第二行)的数据如下
      • 在程序运行后, x(第一行)和y(第二行)的数据如下
      • 可以发现, 确实是完成了128位二进制数的加法

实验任务2

实验任务3

实验任务4

实验任务5

实验任务6

标签:8086,int,mov,si,指令,能看懂,寄存器,ax,21h
来源: https://www.cnblogs.com/Nekasu/p/15670550.html