[英]Trying output previously input strings two in a row in TASM
好吧,标题说明了一切:例如,如果我输入“ a”,那么我将得到此“先行字符串:a”(原文如此!)。 我做错了事,我不知道发生了什么。
model tiny
.code
org 0100h
start:
mov ax,cs ;set data seg == code seg
mov ds,ax
mov dx,offset tm
mov ah,0ah
int 21h
mov dx,offset testm
mov ah,09h
int 21h
mov dx,offset tm
add dx,2h
mov ah,09h
int 21h
mov dx,offset tm
add dx,2h
mov ah,09h
int 21h
ret
tm db 255,255,255 dup("$")
testm db "Entered string: $"
End start
Int 21h/0Ah
将按下的Enter键存储为0Dh
。 对于Int 21h/09h
这是“回车”,而只有“回车”。 您需要额外的“换行符”。 您可以将换行符( 10h
)添加到tm
字符串的末尾,或者添加另一个Int 21h/09
过程,该过程指向仅包含两个换行符和一个终止$
的字符串( crlf db 0Dh, 0Ah, "$"
。
除了添加换行符,还可以将tm
的0Dh
更改为'$'以获取“原始”字符串:
MODEL tiny
.CODE
.386 ; for `movzx`
ORG 0100h
start:
mov dx, offset tm
mov ah, 0ah
int 21h
mov dx, offset crlf ; Carriage Return & Line Feed & '$'
mov ah, 09h
int 21h
movzx di, byte ptr [tm + 1] ; Length of string w/o the last 0Dh
add di, OFFSET tm + 2 ; Plus start offset of string -> DI points to 0Dh
mov byte ptr [di], '$' ; Change 0Dh to '$'
mov dx,offset testm
mov ah,09h
int 21h
mov dx,offset tm
add dx,2h
mov ah,09h
int 21h
mov dx,offset tm
add dx,2h
mov ah,09h
int 21h
ret
tm db 255,255,255 dup("$")
testm db "Entered string: $"
crlf db 0Dh, 0Ah, "$"
END start
一种优雅的方法是利用WriteFile函数Int21h/40h
:
model tiny
.code
org 0100h
start:
mov dx, offset tm
mov ah, 0ah
int 21h
mov dx, offset crlf
mov ah, 09h
int 21h
mov dx, offset testm
mov ah, 09h
int 21h
mov dx, offset tm + 2
xor ch, ch
mov cl, tm + 1 ; Length of tm = number of bytes to write
mov ah, 40h
mov bx, 1 ; Handle 1: StdOut
int 21h ; BX, CX & DX not changed
mov ah, 40h ; Once more.
mov bx, 1
int 21h
ret
tm db 255,255,255 dup("$")
testm db "Entered string: $"
crlf db 0Dh, 0Ah, "$"
End start
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.