Assembly 在int 21h中,Mov ah,10有什么用

Assembly 在int 21h中,Mov ah,10有什么用,assembly,nasm,dos,x86-16,Assembly,Nasm,Dos,X86 16,在int21h 我们通常使用likemov-ah,0a进行字符串输入,但为什么使用mov-ah,10 nter db 'enter you name:$' nam db 50,0,50 dup('$') ;num is 50, num + 1 is 0, num + 2 is 50 lfcr db 10,13,'$' ;line feed carrier return/next line carriage return .code main proc mov

int21h

我们通常使用like
mov-ah,0a
进行字符串输入,但为什么使用mov-ah,10

nter db 'enter you name:$'
nam db 50,0,50 dup('$')     ;num is 50, num + 1 is 0, num + 2 is 50
lfcr db 10,13,'$'           ;line feed carrier return/next line carriage return
.code
main proc 
    mov ax,@data            ;define
    mov ds,ax
    mov ah,9                
    lea dx,nter             ;output nter
    int 21h
    mov ah,10
    lea dx,nam
    int 21h
明目张胆地从……偷来的

读缓冲输入

DS:DX
=缓冲区

字节[ds:DX]
=缓冲区长度
byte[ds:DX+1]
(输入)=缓冲区中可输入的字符数 召回
(输出)=缓冲区中的字符数

缓冲区从DS:DX+2开始

10
0Ah

公然从

读缓冲输入

DS:DX
=缓冲区

字节[ds:DX]
=缓冲区长度
byte[ds:DX+1]
(输入)=缓冲区中可输入的字符数 召回
(输出)=缓冲区中的字符数

缓冲区从DS:DX+2开始

10
0Ah

大多数情况下,我们使用mov-ah,0a作为字符串输入,但为什么使用mov-ah,10呢

nter db 'enter you name:$'
nam db 50,0,50 dup('$')     ;num is 50, num + 1 is 0, num + 2 is 50
lfcr db 10,13,'$'           ;line feed carrier return/next line carriage return
.code
main proc 
    mov ax,@data            ;define
    mov ds,ax
    mov ah,9                
    lea dx,nter             ;output nter
    int 21h
    mov ah,10
    lea dx,nam
    int 21h
如果需要,可以使用十进制;但是大多数(全部?)DOS函数的参考资料显示十六进制的值(函数号、中断号和地址),其他程序员更可能识别十六进制值;因此,使用十进制将使其更难阅读

另一种选择是使用前置处理器,例如,“定义缓冲输入功能号0x0A”和“mov ah,缓冲输入功能号”。对于不太熟悉DOS的人来说,这使得阅读更容易(和/或避免了评论);但对于非常熟悉DOS的人来说,这会让情况变得更糟(要检查是否使用了正确的数字,他们必须检查两个不同的位置,而不是一个)

大多数情况下,我们使用mov-ah,0a作为字符串输入,但为什么使用mov-ah,10呢

nter db 'enter you name:$'
nam db 50,0,50 dup('$')     ;num is 50, num + 1 is 0, num + 2 is 50
lfcr db 10,13,'$'           ;line feed carrier return/next line carriage return
.code
main proc 
    mov ax,@data            ;define
    mov ds,ax
    mov ah,9                
    lea dx,nter             ;output nter
    int 21h
    mov ah,10
    lea dx,nam
    int 21h
如果需要,可以使用十进制;但是大多数(全部?)DOS函数的参考资料显示十六进制的值(函数号、中断号和地址),其他程序员更可能识别十六进制值;因此,使用十进制将使其更难阅读


另一种选择是使用前置处理器,例如,“定义缓冲输入功能号0x0A”和“mov ah,缓冲输入功能号”。对于不太熟悉DOS的人来说,这使得阅读更容易(和/或避免了评论);但对于非常熟悉DOS的人来说,这会让情况变得更糟(要检查是否实际使用了正确的数字,他们必须检查两个不同的位置,而不是一个)。

0Ah
(十六进制)是
10
十进制。值10十进制与0a十六进制相同。表示同一数字的两种方式是十进制的。十进制的值10与十六进制的值0a相同。同一个数字有两种表达方式,但这并不是该引用告诉我们的!退出时缓冲区中的字符数报告在表示预加载了多少字符的字段顶部。输入的字符开始于
DS:DX+2
@SepRoland:不确定我是怎么犯的错误。别担心,我们所有人都会犯这种错误。这不是参考文献告诉我们的!退出时缓冲区中的字符数报告在表示预加载了多少字符的字段顶部。输入的字符开始于
DS:DX+2
@SepRoland:不知道我是怎么犯的错误。别担心,我们都会犯这种错误。