我对汇编编程非常陌生,主要是尝试从youtube视频和“x86处理器的汇编语言”pdf中学习。该程序现在已经接近完成,但我已经得到3个我无法弄清楚的错误。
符号类型冲突(第15行)
.model small
.data
message db "Please enter a for mutiplication or b for division $"
message2 db " Enter the first number $"
message3 db " Enter the second number $"
message4 db " * $"
message5 db " / $"
message6 db " = $"
.code
main proc
mov ax, seg message
mov ds, ax
mov dx, offset message
mov ah, 9h
int 21h
mov ah, 1h ;input stored in al
int 21h
mov bl, al ; menu selection input stored in bl so al can be used freely
mov ah, seg message2
mov ds, ah
mov dx, offset message2
mov ah, 9h
int 21h
mov ah, 1h; input stored in al
int 21h
mov cl, al ; first number input stored in cl so al can be used freely
mov dl, bl
mov ah, 2h
int 21h
mov dl, al ;second number imput stored in dl so al can be used again
sub cl, 30h ;convert characters to decimal
sub dl, 30h
mov ax, cl ;preform division
div dl
mov al, cl ;preform multiplication
mul dl
add cl, 30h ; convert decimal back to the characters
add dl, 30h
main endp
end main
最终我想将输入范围限制为1-100,我也很感激如何做到这一点的任何提示,任何帮助将不胜感激
答案 0 :(得分:2)
我无法在这里重现错误1)和3)。也许他们因复制而“走了”。删除源中的行并再次键入它们。
“错误A2070:无效的指令操作数”:
1)第27和26行:
mov ah, seg message2
mov ds, ah
段是16位值。您无法将其加载到8位寄存器(AH
)中。此外,您不能将8位寄存器(AH
)复制到16位寄存器(DS
)。将行更改为:
mov ax, seg message2
mov ds, ax
2)第46行:
mov ax, cl ;preform division
div dl
您不能将8位寄存器(CL
)复制到16位寄存器(AX
)。有一些特殊说明可以执行此类操作:MOVZX
& MOVSX
。第一条指令将8位寄存器视为无符号整数,第二条指令视为有符号整数。将行更改为:
movzx ax, cl ;preform division
div dl
“古老的”8086方式是:
xor ch, ch ; set CH (the upper part of CX) to null
mov ax, cx ;preform division
div dl