這是我的導師給我的例子之一,但我需要找到一種方法來顛倒我輸入的順序。
這是代碼:
e200 "Name: $"
e300 "Hello, $"
a100
mov ah, 09
mov dx, 200
int 21
mov bx, 400
mov ah, 01
int 21
mov [bx], al
inc bx
cmp bx, 405
jne 10a
mov cl, 24
mov [bx], cl
mov ah, 02
mov dl, 0a
int 21
mov dl, 0d
int 21
mov ah, 09
mov dx, 300
int 21
mov ah, 09
mov dx, 400
int 21
int 20
輸出是:
Name: Maria
Hello, Maria
預期輸出(反向):
Name: Maria
Hello, ariaM
uj5u.com熱心網友回復:
在當前的 lDebug 和(僅創建可執行檔案)上在 Microsoft 的 MS-DOS 版本 2 的 Debug 上進行測驗(在 MIT 許可下可用)。這應該可以解決您的任務。
f 100 4FF 90
a 100
mov ah, 09
mov dx, 500
int 21
mov ah, 0A
mov dx, 800
int 21
mov ah, 09
mov dx, 600
int 21
xor cx, cx
mov cl, [801]
mov bx, cx
add bx, 801
jcxz 190
a 130
mov ah, 02
mov dl, [bx]
int 21
dec bx
loop 130
a 190
mov ah, 09
mov dx, 700
int 21
mov ax, 4C00
int 21
e 800 FF 0 0D
e 500 "Name: $"
e 600 0D 0A "Hello, $"
e 700 0D 0A "$"
g
q
800 到 901 以下為中斷 21h 服務 0Ah 保存最大大小的緩沖區,我們將其初始化為 FF(緩沖區大小 255)、0(無需呼叫)、0D(表示可呼叫輸入的結束)。
500、600 和 700 包含要與中斷 21h 服務 09h 一起使用的美元終止訊息。
輸出回圈計數器初始化為 CX = CL = 輸入行的位元組長度,由服務 0Ah 回傳,不包括最終的回車。
輸出的偏移量初始化為 BX = 801 CX,與 802 CX - 1 相同。802 是回傳輸入的第一個位元組的地址。802 CX 是回傳輸入的最后一個位元組后面的地址。減一用作指向最后一個位元組而不是后面的調整。
jcxz跳過空名稱的回圈。mov dl, [bx]將一個位元組加載到 DX 的低半部分。中斷 21h 服務 02h 用于輸出一個位元組。
dec bx減少存盤在 BX 中的偏移量。指令遞減 CX 并在
loop 130結果 CX 非零時跳回。該
f命令是用所有nop指令填充代碼段的一部分。除了不同的a命令,這允許我們在代碼中為跳轉目標放置和使用固定偏移量,而無需確切知道每條指令的長度。輸入名稱輸入,然后使用 鍵指示其結束Enter。
要生成可執行檔案,請預先添加 command f 100 9FF 0,然后g運行以下命令而不是命令:
r bx
0
r cx
900
n test.com
w 100
q
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/492604.html
