我需要得到字符串长度编号,我的程序成功地做到了这一点,但是它也输出了没有第一个字母的初始字符串。
.model small
.stack 200h
.data
nuskaitymoBuferis db 11
.code
pr1:
mov ax, @data
mov ds, ax
mov dx, offset nuskaitymoBuferis
mov ah, 0Ah
int 21h
mov nuskaitymoBuferis+11, '$'
mov dl, nuskaitymoBuferis+1
add dl, 30h
mov ah, 02h
int 21h
mov ah, 4ch
mov al, 00h
int 21h
end pr1例如,如果输入为:'test',则程序输出:'4est‘
发布于 2015-09-30 08:24:41
在MSDOS中,在"goto start“列和"goto next”的两个步骤中执行"goto to the start of the next“,十六进制: 0Dh (回车= CR),0Ah (Line Feed = LF)。当您按ENTER按钮时,计算机只获得一个CR,该CR由INT 21h / AH=0Ah执行,并存储在nuskaitymoBuferis中。光标现在在行的开头,而不是在下一行-在那里'4‘被打印。
TL博士..。在INT 21h / AH=0Ah后面插入行馈源
...
mov dx, offset nuskaitymoBuferis
mov ah, 0Ah
int 21h
mov nuskaitymoBuferis+11, '$' ; not really good ;-)
mov dl, 0Ah
mov ah, 02h
int 21h
...发布于 2015-09-30 08:27:40
int 21h / ah=02h不会输出一个以上的字符。输入"test“时,字符串”test“会回显到控制台。然后,在同一行的开头打印字符'4‘,这将给出"4est“。
如果希望“4”出现在新行上,请打印一个行提要字符。也就是说,在打印字符串长度之前,请执行以下操作:
mov dl,10 ; linefeed
mov ah,2
int 21h您的代码中还有其他一些问题。nuskaitymoBuferis db 11不为11个字节保留空间;它为值为11的单个字节保留空间。若要为11个字节保留空间,请使用nuskaitymoBuferis db 11 dup(0)。
即使进行了这种更改,mov nuskaitymoBuferis+11, '$'仍然会出现缓冲区溢出,因为您试图写入11字节缓冲区的12字节(记住偏移从零开始)。
https://stackoverflow.com/questions/32860965
复制相似问题