mov ah,9 int 21h中的DX+2是什么意思?
What does DX + 2 mean in mov ah,9 int 21h?
mov dx, offset buffer
mov ah, 0ah
int 21h
jmp print
buffer db 10,?, 10 dup(' ')
print:
xor bx, bx
mov bl, buffer[1]
mov buffer[bx+2], '$'
mov dx, offset buffer + 2
mov ah, 9
int 21h
我知道buffer[bx+2]
代表'$',但是mov ah,9
中的offset buffer +2
代表什么?
他们说,
"Start printing from address DS:DX + 2
". From address ds:dx +2
.
当用int 21h, ah=0Ah从键盘上捕获一个字符串时,该字符串有下一个结构:
可以看到,前两个字节是控制字节,用户输入的字符从第三个字节(byte 2)开始。最后一个字符是 chr(13)(ENTER 键)。
要使用 int 21h, ah=09h 显示这个捕获的字符串,您必须将最后一个字符 (13) 替换为 '$',然后使 DX 指向从第三个字节开始的有效字符:
mov dx, offset buff + 2
或这个(两者等价):
mov dx, offset buff
add dx, 2
用'$'替换chr(13)的方法在下图中解释:注意捕获的字符串的长度在第二个字节(字节1)中,我们必须添加这个长度才能达到最后一个byte chr(13),现在我们可以替换它了:
接下来是代码:
.stack 100h
.data
msg db 'Enter text : $'
text db 11 ;MAX LENGTH ALLOWED.
db ? ;LENGTH ENTERED.
db 11 dup(?) ;CHARACTERES.
.code
mov ax, @data
mov ds, ax
;DISPLAY MESSAGE TO USER.
mov dx, offset msg
mov ah, 9
int 21h
;CAPTURE TEXT.
mov dx, offset text
mov ah, 0Ah
int 21h
;REPLACE ENTER WITH $.
mov bl, '$'
mov si, offset text + 1 ;◄■ POSITION OF LENGTH ENTERED.
mov al, [si] ;◄■ GET LENGTH ENTERED.
mov ah, 0 ;◄■ CLEAR AH TO USE AX.
add si, ax ;◄■ SI POINTS TO LAST CHAR.
inc si ;◄■ +1 TO POINT TO CHAR 13.
mov [si], bl ;◄■ REPLACE 13 WITH '$'.
mov ax, 4c00h
int 21h
mov dx, offset buffer
mov ah, 0ah
int 21h
jmp print
buffer db 10,?, 10 dup(' ')
print:
xor bx, bx
mov bl, buffer[1]
mov buffer[bx+2], '$'
mov dx, offset buffer + 2
mov ah, 9
int 21h
我知道buffer[bx+2]
代表'$',但是mov ah,9
中的offset buffer +2
代表什么?
他们说,
"Start printing from address
DS:DX + 2
". From addressds:dx +2
.
当用int 21h, ah=0Ah从键盘上捕获一个字符串时,该字符串有下一个结构:
可以看到,前两个字节是控制字节,用户输入的字符从第三个字节(byte 2)开始。最后一个字符是 chr(13)(ENTER 键)。
要使用 int 21h, ah=09h 显示这个捕获的字符串,您必须将最后一个字符 (13) 替换为 '$',然后使 DX 指向从第三个字节开始的有效字符:
mov dx, offset buff + 2
或这个(两者等价):
mov dx, offset buff
add dx, 2
用'$'替换chr(13)的方法在下图中解释:注意捕获的字符串的长度在第二个字节(字节1)中,我们必须添加这个长度才能达到最后一个byte chr(13),现在我们可以替换它了:
接下来是代码:
.stack 100h
.data
msg db 'Enter text : $'
text db 11 ;MAX LENGTH ALLOWED.
db ? ;LENGTH ENTERED.
db 11 dup(?) ;CHARACTERES.
.code
mov ax, @data
mov ds, ax
;DISPLAY MESSAGE TO USER.
mov dx, offset msg
mov ah, 9
int 21h
;CAPTURE TEXT.
mov dx, offset text
mov ah, 0Ah
int 21h
;REPLACE ENTER WITH $.
mov bl, '$'
mov si, offset text + 1 ;◄■ POSITION OF LENGTH ENTERED.
mov al, [si] ;◄■ GET LENGTH ENTERED.
mov ah, 0 ;◄■ CLEAR AH TO USE AX.
add si, ax ;◄■ SI POINTS TO LAST CHAR.
inc si ;◄■ +1 TO POINT TO CHAR 13.
mov [si], bl ;◄■ REPLACE 13 WITH '$'.
mov ax, 4c00h
int 21h