8086汇编语言无符号解释

时间:2014-11-02 22:42:49

标签: unsigned x86-16 integer-arithmetic

我必须在8086程序集中编写一个程序来计算:

(a+b*c+2/c)/(2+a)+e

,其中

ab - 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;

我不知道如何继续。

1 个答案:

答案 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位并从那里继续。