汇编语言把结果输出屏幕上,程序怎么编?
比如我要计算3*4,把结果输出12到屏幕上,程序怎么编?把程序代码给我,这个问题我侧重于想知道这个成个程序代码是怎样的,至于其它文字方面的都可以少写,但代码一定要有C语言...
比如我要计算3*4,把结果输出12到屏幕上,程序怎么编?把程序代码给我,这个问题我侧重于想知道这个成个程序代码是怎样的,至于其它文字方面的都可以少写,但代码一定要有
C语言里直接用printf函数就可以了,这样可以检验程序编的是否正确,我想在汇编语言里也看看,也想检验以程序编的是否正确,那怎么编呢? 展开
C语言里直接用printf函数就可以了,这样可以检验程序编的是否正确,我想在汇编语言里也看看,也想检验以程序编的是否正确,那怎么编呢? 展开
5个回答
展开全部
我写了一个简易(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
记住把东西输到屏幕上都是通过输他的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
展开全部
这个程序有两处错误:
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
你这么改一下再试试看
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
你这么改一下再试试看
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
想看结果,可以通租枯过调试debug,或者其他的调试工具,比如派型槐学习汇编可以下个“轻松尘友汇编”这个工具。TASM可以单步调试的。实在想输出的话,可以通过DOS中断来输出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
0b800h?有点忘了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询