下面程序有什么问题(为什么没有输出我刚输入的)??
2008-12-14 15:0764249553911 | 分类:汇编语言 | 浏览1015次
输入按回车结束
分享到:
2008-12-15 11:34提问者采纳
解决这个问题,首先要明白 ah=0ah,int 21h 是怎么运作的,我来解释一下:
ah=0ah,int 21h 的键盘输入是把所输入的数据放进 ds:[dx]里,在这个程式里,dx 所指向的是 string, 你所输入的数据应该是从 string[2] 开始,string[0]和string[1]是保留的,在这份程式里,string[0]=20, 而 string[1]=所输入的长度,例如你输入的是 "abc" 那么 string[1]=3。然而,还有一个字节没算在这 3 里面的,这个就是 al 传回的 0Dh(换行字节),它被放在你所输入最后一个字节的后面。
要用 ah=9h,int 21h 输出一个字串,必须要在字串后面加上"$",这个你是明白的,只不过放错了地方,你把它放在了换行字节的后面,你应该放在换行字节上面才对,所有这份程式,应该加点工(大写是加上去或作过修改的):
;如果你希望效果好一点,可以加上下面几行:
这样就可以顺利把输入打出来了。
提问者评价
好,只有你真正解决了问题!o,god……
2008-12-14 15:0764249553911 | 分类:汇编语言 | 浏览1015次
assume cs:code
code segment
string db 20,?,20 dup(?),'$'
start:
mov ax,code
mov ds,ax
mov dx,0
mov ah,0ah
int 21h
MOV dx,0
mov ah,9
int 21h
mov ah,4ch
int 21h
code ends
end start
输入按回车结束
分享到:
2008-12-15 11:34提问者采纳
解决这个问题,首先要明白 ah=0ah,int 21h 是怎么运作的,我来解释一下:
ah=0ah,int 21h 的键盘输入是把所输入的数据放进 ds:[dx]里,在这个程式里,dx 所指向的是 string, 你所输入的数据应该是从 string[2] 开始,string[0]和string[1]是保留的,在这份程式里,string[0]=20, 而 string[1]=所输入的长度,例如你输入的是 "abc" 那么 string[1]=3。然而,还有一个字节没算在这 3 里面的,这个就是 al 传回的 0Dh(换行字节),它被放在你所输入最后一个字节的后面。
要用 ah=9h,int 21h 输出一个字串,必须要在字串后面加上"$",这个你是明白的,只不过放错了地方,你把它放在了换行字节的后面,你应该放在换行字节上面才对,所有这份程式,应该加点工(大写是加上去或作过修改的):
LEA DX,STRING
mov ah,0ah
int 21h
XOR BX,BX
LEA SI,STRING+1
MOV BL,BYTE PTR[SI]
MOV STRING[BX+2],"$"
;如果你希望效果好一点,可以加上下面几行:
;MOV AH,02H
;MOV DL,0DH
;INT 21H
;MOV DL,0AH
;INT 21H
LEA DX,STRING+2
mov ah,9
int 21h
这样就可以顺利把输入打出来了。
提问者评价
好,只有你真正解决了问题!o,god……