繁体   English   中英

尝试在TASM中连续输出两个之前输入的字符串

[英]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, "$"

除了添加换行符,还可以将tm0Dh更改为'$'以获取“原始”字符串:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM