Assembly 用汇编语言添加2个数字并打印结果
需要帮助,如何添加两个数字,然后打印结果这里是我的代码Assembly 用汇编语言添加2个数字并打印结果,assembly,masm,Assembly,Masm,需要帮助,如何添加两个数字,然后打印结果这里是我的代码 .MODEL SMALL .STACK 200H .DATA NUM1 DB 12 NUM2 DB 3 VAL DB ? MSG1 DB "The sum is : $" .CODE BEGIN PROC MOV AX, @DATA MOV DS, AX MOV AL, NUM1 ADD AL, NUM2 MOV VAL, AL
.MODEL SMALL
.STACK 200H
.DATA
NUM1 DB 12
NUM2 DB 3
VAL DB ?
MSG1 DB "The sum is : $"
.CODE
BEGIN PROC
MOV AX, @DATA
MOV DS, AX
MOV AL, NUM1
ADD AL, NUM2
MOV VAL, AL
LEA DX, MSG1
MOV AH, 9
INT 21H
MOV AH, 2
MOV DL, VAL
INT 21H
MOV AX, 4C00H
INT 21H
BEGIN ENDP
END BEGIN
我得到的结果是
The sum is 0
我的代码有什么错误?您不能这样做,您将看不到数字,您必须获得代表您结果的数字的ascii十六进制值。非常基本的基础。让我来寻找一个链接 这是:
通过将值不断除以10,您将得到余数中的单个数字,但顺序“错误”(从最后到第一)。要按“正确”顺序(从前到后)打印,您可以通过
PUSH
ing和POP
ing(关键字:后进先出=后进先出)将其反转:
哪种汇编语言?你看,它是masm,不是吗?@icbytes:我不想说。有什么想法吗?我真的需要帮助。这里是新手
.MODEL SMALL
.STACK 200H
.DATA
NUM1 DB 12
NUM2 DB 3
VAL DW ?
MSG1 DB "The sum is : "
DECIMAL DB "00000$"
.CODE
BEGIN PROC
MOV AX, @DATA
MOV DS, AX
XOR AX, AX
MOV AL, NUM1
ADD AL, NUM2
ADC AH, 0
MOV VAL, AX
MOV AX, VAL
CALL AX_to_DEC
LEA DX, MSG1
MOV AH, 9
INT 21H
MOV AX, 4C00H
INT 21H
BEGIN ENDP
AX_to_DEC PROC
mov bx, 10 ; divisor
xor cx, cx ; CX=0 (number of digits)
First_Loop:
xor dx, dx ; Attention: DIV applies also DX!
div bx ; DX:AX / BX = AX remainder: DX
push dx ; LIFO
inc cx ; increment number of digits
test ax, ax ; AX = 0?
jnz First_Loop ; no: once more
mov di, OFFSET DECIMAL ; target string DECIMAL
Second_Loop:
pop ax ; get back pushed digit
or ax, 00110000b ; to ASCII
mov byte ptr [di], al ; save AL
inc di ; DI points to next character in string DECIMAL
loop Second_Loop ; until there are no digits left
mov byte ptr [di], '$' ; End-of-string delimiter for INT 21 / FN 09h
ret
AX_to_DEC ENDP
END BEGIN