Assembly 汇编程序不工作导致错误结果
我对汇编程序还不熟悉,我不确定我做的这个小程序到底出了什么问题。它所做的只是a+b*c。该程序可与tasm、tlink和所有工具配合使用。它甚至显示我给a,b,c赋值,但结果就像50行符号…我不明白Assembly 汇编程序不工作导致错误结果,assembly,Assembly,我对汇编程序还不熟悉,我不确定我做的这个小程序到底出了什么问题。它所做的只是a+b*c。该程序可与tasm、tlink和所有工具配合使用。它甚至显示我给a,b,c赋值,但结果就像50行符号…我不明白 dosseg .model small .stack .data mesaj_a db 13,10,' Introduceti numarul a:$' mesaj_b db 13,10
dosseg
.model small
.stack
.data
mesaj_a db 13,10,' Introduceti numarul a:$'
mesaj_b db 13,10,' Introduceti numarul b:$'
mesaj_c db 13,10,' Introduceti numarul c:$'
afis_rez db 13,10,' Rezultat:$'
.code
pstart:
mov ax,@data
mov ds,ax
;--------------
mov dx, offset mesaj_a
mov ah,09
int 21h
mov ah, 0ah
int 21h
mov bx,ax
;----------------
mov dx, offset mesaj_b
mov ah,09
int 21h
mov ah, 0ah
int 21h
mov cx,ax
;----------------
mov dx, offset mesaj_c
mov ah,09
int 21h
mov ah, 0ah
int 21h
;---------------
mul cx
add ax,bx
mov bx,ax
;---------------
mov dx, offset afis_rez
mov ah,09
int 21h
mov dx,bx
int 21h
;---------------
mov ax, 4ch
int 21h
end pstart
打印数字时没有DOS中断。您必须自己将数值转换为字符串,然后使用INT 21H/AH=9
打印字符串
此外,这一行:
mov ax, 4ch
应该是:
mov ax,4c00h
(函数号需要进入
AH
,它是AX
的上半部分)您不能通过设置dx
来打印数字。您需要将其转换为字符串dx
包含要打印的消息的偏移量,如mov dx,offset afis_rez
。因此,底部附近的一对mov-dx、bx
和int-21h
将在您计算的bx
的偏移量处打印内存中的任何字符。读取数字也是如此-请参阅0ah
期望作为输入和作为输出的函数。您需要在读取后将缓冲区中返回的字符串转换为数字。您的意思是我应该将每0ah更改为01?mov dx、bx呢?我应该写什么来代替dx?
mov ax,4c00h