【发布时间】:2021-01-12 09:03:40
【问题描述】:
我得到了一个任务,我必须添加 2 个数字并显示结果。我在控制台中显示它们时遇到问题。它不显示数字,而是显示 ascii[ 表示相加大于 9 的数字。例如:8 + 9 = 17 并打印字母 A。
如何显示数字而不是 ascii?
下面是我正在使用的代码。
.model large
DATAS SEGMENT
aV dw ?
bV dw ?
cV dw ? ;,'$'
DATAS ENDS
STACKSEGMENT SEGMENT
startStack label word
dw 3 dup(0)
STACKSEGMENT ENDS
CODES SEGMENT
ASSUME CS:CODES, SS:STACKSEGMENT, DS:DATAS
START:
MOV AX, SEG DATAS
MOV DS, AX
MOV AX, SEG STACKSEGMENT
MOV SS, AX
MOV AX, OFFSET startStack
MOV SP, AX
xor ax,ax
mov ah, 01h
int 21h
xor ah,ah
sub al, 48 ; ASCII to DECIMAL or substract al 30h
mov aV, ax
xor ax,ax
; NEW LINE
MOV DL, 10
MOV ah, 02h
INT 21h
mov ah, 01h
int 21h
xor ah,ah
sub al, 48 ; ASCII to DECIMAL or substract al 30h
mov bV, ax
MOV DL, 10
MOV ah, 02h
INT 21h
mov ax, aV
push ax
mov ax, bV
push ax
mov ax, cV
push ax
CALL FAR PTR mathcalc
MOV BX, DS:[cV] ; cV
add BX, 30H
MOV AH,2
MOV DL,BH
INT 21H
MOV AH,2
MOV DL,BL
INT 21H
sub BX, 30H
CALL ENDPROGRAM
mathcalc PROC FAR
push BP
mov bp,sp
mov al, SS:[bp+10]
;========
add al,SS:[bp+8]
;========
xor ah,ah
mov ss:[bp+6], ax
xor dx,dx
MOV dx, ss:[bp+6]
mov DS:[cV], dx
pop bp
retf 2
ENDP
ENDPROGRAM:
MOV AX,4c00h
INT 21h
CODES ENDS
END START
PS:我正在使用带有 TASM 编译器的 DOSBox。
谢谢, 亲切的问候, 阿尔芒
【问题讨论】:
标签: assembly tasm emu8086 dosbox