首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tasasint21h ah=02h输出多个字符

Tasasint21h ah=02h输出多个字符
EN

Stack Overflow用户
提问于 2015-09-30 08:05:34
回答 2查看 1.6K关注 0票数 1

我需要得到字符串长度编号,我的程序成功地做到了这一点,但是它也输出了没有第一个字母的初始字符串。

代码语言:javascript
复制
.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‘

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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后面插入行馈源

代码语言:javascript
复制
...
mov dx, offset nuskaitymoBuferis
mov ah, 0Ah
int 21h
mov nuskaitymoBuferis+11, '$'           ; not really good ;-)

mov dl, 0Ah
mov ah, 02h
int 21h
...
票数 1
EN

Stack Overflow用户

发布于 2015-09-30 08:27:40

int 21h / ah=02h不会输出一个以上的字符。输入"test“时,字符串”test“会回显到控制台。然后,在同一行的开头打印字符'4‘,这将给出"4est“。

如果希望“4”出现在新行上,请打印一个行提要字符。也就是说,在打印字符串长度之前,请执行以下操作:

代码语言:javascript
复制
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字节(记住偏移从零开始)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32860965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档