我最近開始研究這個話題,我仍然很困惑,呼叫mReadAX時要提交什么引數?
根據賦值,這個宏應該在 10 位數字系統的 AX 暫存器中輸入一個整數。
這是宏本身。
mReadAX macro buffer, size
local input, startOfConvert, endOfConvert
push bx
push cx
push dx
input:
mov [buffer], size
mov dx, offset [buffer]
mov ah, 0Ah
int 21h
mov ah, 02h
mov dl, 0Dh
int 21h
mov ah, 02h
mov dl, 0Ah
int 21h
xor ah, ah
cmp ah, [buffer][1]
jz input
xor cx, cx
mov cl, [buffer][1]
xor ax, ax
xor bx, bx
xor dx, dx
mov bx, offset [buffer][2]
cmp [buffer][2], '-'
jne startOfConvert
inc bx
dec cl
startOfConvert:
mov dx, 10
mul dx
cmp ax, 8000h
jae input
mov dl, [dx]
sub dl, '0'
add ax, dx
cmp ax, 8000h
jae input
inc bx
loop startOfConvert
cmp [buffer][2], '-'
jne endOfConvert
neg ax
endOfConvert:
pop dx
pop cx
pop bx
endm mReadAX
uj5u.com熱心網友回復:
該宏使用 DOS.BufferedInput 函式 0Ah。在緩沖輸入的作業原理中閱讀有關此功能的詳細資訊。
呼叫 mReadAX 時要提交哪些引數?
- 緩沖區引數需要是足夠大的記憶體部分的偏移地址,以容納所需的輸入結構。
- size引數需要是一個位元組大小的值 [1,255],它決定了輸入允許處理多少個字符。
例如。如果要允許 5 位輸入,請設定size=6. 這比 5 多 1,因為您需要允許添加終止回車。在這種情況下,buffer引數必須指向一個 8 位元組的記憶體緩沖區。這又多了 2 個位元組,因為第一個位元組將接收大小值,而第二個位元組用于向您回傳實際輸入的長度。
我沒有過多地分析宏代碼本身,因為我認為它是在作業中給出的,因此應該是正確的。可悲的是,我在mov dl, [dx]. 這必須成為mov dl, [bx].
允許的輸入范圍是 [-32767,32767]。因此,您的size引數的最小值是7。
size equ 7
buffer db size, 0, size dup(0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/527625.html
