[英]Intel 8086 assembly reversing order of string
所以我在英特爾 8086 程序集中編寫代碼,我想輸入兩個字符串(一行中的一個字符串)並希望將它們保存到變量中。 每個字符串最多可以包含 100 個 utf8 字符。 在 output 中,我嘗試更改 then 的順序(第一行將是輸入中的第二個字符串),但我收到一個錯誤,即服務 21h 正在嘗試從未定義的字節中讀取。 你能向我解釋一下我應該在我的代碼中改變什么嗎?
cpu 8086
segment code
..start mov ax, data
mov ds, ax
mov bx,stack
mov ss,bx
mov sp,dno
input1 mov ah,0x0a
mov dx, load
int 21h
mov bl,[load+1]
mov [chars1+bx],byte '$'
input2 mov ah,0x0a
mov dx, load
int 21h
mov bl,[load+1]
mov [chars2+bx],byte '$'
output mov dx,chars2
mov ah,9
int 21h
mov dx,chars1
mov ah,9
int 21h
end hlt
segment data
load db 200, ?
chars1 db ?
resb 100
chars2 db ?
resb 100
segment stack
resb 100
dno: db ?
但我收到一個錯誤,即服務 21h 正在嘗試從未定義的字節中讀取。 你能向我解釋一下我應該在我的代碼中改變什么嗎?
您沒有加載 DOS.BufferedInput function 0Ah 所需的輸入結構的地址。 在緩沖輸入的工作原理中閱讀所有相關信息。
Emu8086 遵循 MASM 編程風格,其中mov dx, load
將設置DX
寄存器等於存儲在地址load處的字。 要實際接收地址本身,您需要編寫mov dx, offset load
。
另一個問題是input1和input2都試圖使用相同的加載輸入結構,但具有不同的緩沖存儲器。 緩沖區必須是此 DOS function 的輸入結構的一部分; 它始終必須位於所提供地址的偏移量 2 處(在您的情況下為load )。
這是您可以解決的方法:
...
input1: mov ah, 0Ah
mov dx, OFFSET loadA
int 21h
mov bl, [loadA+1]
mov bh, 0
mov [charsA+bx], byte '$'
input2: mov ah, 0Ah
mov dx, OFFSET loadB
int 21h
mov bl, [loadB+1]
mov bh, 0
mov [charsB+bx], byte '$'
output: mov dx, OFFSET charsB
mov ah, 09h
int 21h
mov dx, OFFSET crlf
mov ah, 09h
int 21h
mov dx, OFFSET charsA
mov ah, 09h
int 21h
...
loadA db 101, 0
charsA db 101 dup (0)
loadB db 101, 0
charsB db 101 dup (0)
crlf db 13, 10, "$"
...
BX
之前寫一個明確的mov bh, 0
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.