我编写了一个算法,仅使用Add,Sub和Logical操作符来模拟Booth的算法,并返回一个十六进制值。我的Tasm编译器一直在向我抛出这些错误。当我尝试omodify代码时,它仍然无法正常工作。有人可以帮帮我吗。
(29)行上的额外字符
(38)非法立即
(44)非法立即 (52)未定义符号:RES2
(126)期望指针类型
;Booths Algorithm
;
;
;
;
;
.model small
.stack
.data
prompt db 13,10,"Enter first number to multiply. $"
prompt2 db 13,10,"Enter second number to multiply. $"
res db 13,10,"The answer is $"
ans dw 2
hold db 0
n1=0
n2=0
.code
start:
mov ax,seg prompt,prompt2,res,ans,hold,n1,n2
mov ds,ax
mov ah,09h
mov dx,offset prompt
int 21h
call read
mov n1,bl
mov ah,09h
mov dx, offset prompt2
int 21h
call read
mov n2,bl
call Algorithm
mov [ans],ax
mov bx,ax
mov dx,offset res2
mov ah,09h
int 21h
call write
mov ah,4ch
int 21h
hlt
read:
mov ah,00h
mov [hold],bl
f0:
mov al,01h
int 21h
cmp al,0dh
je Copy
mov cl,al
sub cl,30h
mov al,[hold]
mov bl,0ah
mul bl
mov [hold],al
add [hold],cl
jmp f0
Copy :
mov bl,[hold]
ret
Algorithm:
mov ah,0
mov al,n1
mov cx,8
mov bh,n2
clc
f1:
mov bl,al
and bl,1
jnz f2
JNC f3
sub ah,bh
jmp f3
f2:
jc f3
add ah,bh
f3:
shr ax,1
loop f1
ret
write:
mov al,bl
lea di,[ans]
mov bh,0ah
mov cl,24h
mov [di],cl
dec di
f4:
mov ah,00h
div bh
add ah,30h
mov [di],ah
dec di
cmp al,00h
jnz 4
inc di
mov ah,09h
mov dx,di
int 21h
ret
end start
答案 0 :(得分:2)
我的asm有点生疏,但你可以尝试这些改变:
第29行:
mov ax,@data ; should pick up the address of the data segment
或者:
mov ax, seg prompt ; seg takes only one variable, not multiple...
第38行:
mov [n1],bl ; memory addresses need square brackets
第44行:
mov [n2],bl ; memory addresses need square brackets
第52行:
mov dx,offset res ; don't know where res2 came from
第126行 - 我不确定这里发生了什么......
答案 1 :(得分:0)
代码中的错误:
此行完全无效:
mov ax,seg prompt,prompt2,res,ans,hold,n1,n2.
它必须只是:
move ax,data
您还应该在start:
:
assume cs:code, ds:data, ss:stack
这些也是无效的,因为你想定义内存变量,我想:
n1=0
n2=0
应该是:
n1 db 0
n2 db 0
当您访问n1
并n2
以这种方式撰写时,正如Stobor已经注意到的那样:
mov [n1],bl
mov [n2],bl
所有变量引用都由汇编中的“寻址”完成,所以方括号。
你根本没有定义RES2
,如评论中所述。
希望这会有所帮助。
另见:
http://www.xs4all.nl/~smit/asm01001.htm
http://www.laynetworks.com/assembly%20tutorials2.htm
http://www.faqs.org/faqs/assembly-language/x86/borland/
如果某些内容不够清晰,请在此处添加评论。