汇编语言把结果输出屏幕上,程序怎么编?

2025-01-02 00:34:12
推荐回答(5个)
回答1:

我写了一个简易(0~255)的计算器希望可以帮助你(输入格式为a运算符b=比如你想计算5乘6则应输入5*6=)
记住把东西输到屏幕上都是通过输他的asc码int 21h的02号功能就能实现

DATAS SEGMENT
x db 20 dup(?)
y db 'chu cuo le','$'
DATAS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
LEA SI,X
A: MOV AH,01H
INT 21H
CMP AL,30H
JB B
CMP AL,3AH
JNB F
SUB AL,30H
MOV CH,AL
MOV AL,BL
MOV BL,0AH
MUL BL
ADD AL,CH
MOV BL,AL
JMP A
B: CMP AL,2BH
JNZ K
MOV X[SI],BL
INC SI
MOV CL,0H
AND BL,0
JMP A
K: CMP AL,2DH
JNZ D
MOV X[SI],BL
INC SI
MOV CL,01H
AND BL,0
JMP A
D: CMP AL,2AH
JNZ E
MOV X[SI],BL
INC SI
MOV CL,02H
AND BL,0
JMP A
E: CMP AL,2FH
JNZ T
MOV X[SI],BL
INC SI
MOV CL,03H
AND BL,0
JMP A
F: MOV [SI],BL
CMP AL,3DH
JNZ T
LEA SI,X
MOV AL,X[SI]
INC SI
MOV BL,X[SI]
CMP CL,0
JNZ G
ADD AL,BL
JMP J
G: CMP CL,01H
JNZ H
SUB AL,BL
JMP J
H: CMP CL,02H
JNZ I
AND AH,0
MUL BL
JMP J
I: AND AH,0
CMP CL,03H
DIV BL
J: AND AH,0
CMP AL,100
JB ER
MOV BL,100
DIV BL
MOV CL,AH
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
MOV AL,CL
ER: CMP AL,10
JB YI
MOV BL,10
AND AH,0
DIV BL
ADD AL,30H
MOV DL,AL
MOV CL,AH
MOV AH,02H
INT 21H
MOV AL,CL
YI: ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
JMP L
T: LEA DX,Y
MOV AH,09H
INT 21H
L: MOV AH,01H
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START

回答2:

这个程序有两处错误:
1.
code
segment
后面的assume
应当另起一行
2.
算法中直接将max送到dl并输出到屏幕,用了下面的三条指令:
mov
dl,
max
mov
ah,
02h
int
21h
这么处理屏幕上是不会显示正确结果的。
不能显示的原因是:使用02h号dos系统功能调用时,dl中的应当是字符的ascii码。而你的max中存的是二进制的数值,不是这个数值对应字符的ascii码值。
所以,对于不大于9的二进制数,只要加一条指令将二进制数转成该数的ascii码值就可以正常显示了。
上面的三条指令改成这样:
mov
dl,
max
add
dl,
30h
mov
ah,
02h
int
21h
你这么改一下再试试看

回答3:

想看结果,可以通过调试debug,或者其他的调试工具,比如学习汇编可以下个“轻松汇编”这个工具。TASM可以单步调试的。实在想输出的话,可以通过DOS中断来输出。

回答4:

0b800h?有点忘了

回答5:

调用中断