我必须在8086程序集中编写一个程序来计算:
(a+b*c+2/c)/(2+a)+e
,其中
a
,b
- byte
c
- word
e
- doubleword
,
无符号解释。
到目前为止,我有这个:
assume cs:code,ds:data
data segment
a db 4
b db 2
c dw 16
e dd 126
data ends
code segment
start:
mov ax,data
mov ds,ax
这是我的程序
mov al,b ; al=b
mov ah,0 ; ax=b;
mul c; dx:ax=b*c; b*c=doubleword
mov bx,ax; we save b*c in bx to use ax in the division 2/c
mov al,2; al=2
mov ah,0; al=ax=0
div c; ax=dx:ax/c ; dx=dx:ax%c;
我不知道如何继续。
答案 0 :(得分:0)
写作时
mov bx,ax; we save b*c in bx to use ax in the division 2/c
您实际上只是在B和C之间保存产品的低位字。它与提供的数字一起使用,但它不是一般解决方案。
而不是写作
mov al,2; al=2
mov ah,0; al=ax=0
使用mov ax,2
并记住明确清除DX寄存器,因为该部门需要它。
要继续,我建议您创建双字大小的结果变量,因为最后,最大表达式参与者的大小定义结果的大小。然后在途中移动或将您的部分结果添加到此变量 如果允许使用32位寄存器,合适的方法可能是将所有值提升到32位并从那里继续。