
自己写了个简单的汇编程序:从键盘输入一个字符,再把它输出到显示器上。 结果错了,请问高手们应该怎样改
DATASEGMENTSTR1DB'Inputaletter:',0AH,'$'STR2DB0AH,'Youhaveinputeda:',0AH,'$'DATAENDSC...
DATA SEGMENTSTR1 DB 'Input a letter:',0AH,'$'
STR2 DB 0AH,'You have inputed a:',0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
LEA DX,STR1 MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
LEA DX,STR2 MOV AH,09H
INT 21H
MOV DL,AL MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
结果输出结果是: 展开
STR2 DB 0AH,'You have inputed a:',0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
LEA DX,STR1 MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
LEA DX,STR2 MOV AH,09H
INT 21H
MOV DL,AL MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
结果输出结果是: 展开
展开全部
;已修改好,问题在于DOS的9号功能调用会破坏先前输入的AL中的值。(见DEBUG调试示例)。
;另外为输出美观,也对DATA段稍做了修改。
;不错,加油!
;自己写了个简单的汇编程序:从键盘输入一个字符,再把它输出到显示器上。
;结果错了,请问高手们应该怎样改 检举|2012-11-22 21:06
;提问者: wentbc |浏览次数:13次DATA SEGMENT
DATA SEGMENTSTR1 DB 'Input a letter:','$'
STR2 DB 0DH,0AH,'You have inputed a:','$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
LEA DX,STR1
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
PUSH AX ;保护AX(其实是保存输入的AL)
LEA DX,STR2
MOV AH,09H
INT 21H
POP AX ;恢复AX(其实是恢复AL)
MOV DL,AL
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
附: debug下验证DOS的9号功能调用会破坏先前输入的AL中的值。
E:\masm>debug
-a
17B8:0100 mov ah,9
17B8:0102 mov al,88
17B8:0104 mov dx,200
17B8:0107 int 21
17B8:0109 nop
17B8:010A
-a200
17B8:0200 db 'Hello$'
17B8:0206
-g109
Hello
AX=0924 BX=0000 CX=0000 DX=0200 SP=FFEE BP=0000 SI=0000 DI=0000
DS=17B8 ES=17B8 SS=17B8 CS=17B8 IP=0109 NV UP EI PL NZ NA PO NC
17B8:0109 90 NOP
-
显然,程序执行后AL的值并不等于88,而是24,所以显示‘$'.("$"的ASCII码=24H).
;另外为输出美观,也对DATA段稍做了修改。
;不错,加油!
;自己写了个简单的汇编程序:从键盘输入一个字符,再把它输出到显示器上。
;结果错了,请问高手们应该怎样改 检举|2012-11-22 21:06
;提问者: wentbc |浏览次数:13次DATA SEGMENT
DATA SEGMENTSTR1 DB 'Input a letter:','$'
STR2 DB 0DH,0AH,'You have inputed a:','$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
LEA DX,STR1
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
PUSH AX ;保护AX(其实是保存输入的AL)
LEA DX,STR2
MOV AH,09H
INT 21H
POP AX ;恢复AX(其实是恢复AL)
MOV DL,AL
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
附: debug下验证DOS的9号功能调用会破坏先前输入的AL中的值。
E:\masm>debug
-a
17B8:0100 mov ah,9
17B8:0102 mov al,88
17B8:0104 mov dx,200
17B8:0107 int 21
17B8:0109 nop
17B8:010A
-a200
17B8:0200 db 'Hello$'
17B8:0206
-g109
Hello
AX=0924 BX=0000 CX=0000 DX=0200 SP=FFEE BP=0000 SI=0000 DI=0000
DS=17B8 ES=17B8 SS=17B8 CS=17B8 IP=0109 NV UP EI PL NZ NA PO NC
17B8:0109 90 NOP
-
显然,程序执行后AL的值并不等于88,而是24,所以显示‘$'.("$"的ASCII码=24H).
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询