用16位指令编制程序,处理32位的加减乘除算术四则运算题。
本文计算(3*X+Y-Z)/5的值
值分别为:
1 2 3 |
x dw 7;大家自己定义一下数据,最好不要雷同哦!!! y dw -3 z dw 1 |
其中除5后商为3,余2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
data segment x dw 7;自己定义数据,最好不要雷同!!! y dw -3 z dw 1 v dd ? data ends;定义数据段,其中X,Y,Z为一个字节,V为32位结果双字 code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov ax,3 imul x;IMUL结果保存在AX和DX中 mov cx,ax mov bx,dx;转移到CX和DX中 mov ax,y cwd;将Y扩展为32位,以下若干行相同 add cx,ax adc bx,dx mov ax,z cwd sub cx,ax sbb bx,dx mov ax,cx mov dx,bx mov cx,5 idiv cx lea bx,v;取V的地址 mov [bx],dx mov [bx+2],ax;将结果保存在[bx]到[bx+4]的内存位置32位 mov ah,4ch int 21h code ends end start |
前四个步骤的寄存器状态
ZF=0 SF=0 CF=0 OF=0
最后几步
AL=03,DL=02 符合
第29行和第30行,低位应该是ax,高位是dx