我有一個任務:計算陣列中小于輸入數字的元素數。如何正確地將陣列元素與此變數進行比較?結果是將元素的值與常量進行比較,而不是與輸入的數字進行比較 我的代碼:
.model small
.stack 100h
.data
array db 1, 2, 3, 4, 7, 5, 6
n db 3, ?, 3 dup(?)
counter dw 0
.code
StrToNumber PROC
mov bh, [si 2]
mov bl, [si 3]
sub bx, 3030h
mov al, 10
mul bh
add al, bl
ret
ENDP
start:
;started program exe
mov ax,@data
mov ds, ax
mov ah, 0Ah
lea dx, n
int 21h
lea si, n
call StrToNumber
mov cl, al
lea bx, array
beg:
mov ax, [bx]
cmp ax, 0
jge skip
push bx
lea bx, counter
mov ax, [bx]
inc ax
mov [bx], ax
pop bx
skip:
add bx, 4
loop beg
exit:
mov ax,4c00h
int 21h
end start
uj5u.com熱心網友回復:
您的StrToNumber程序相當特殊,但如果您輸入帶有前置 0 的單個數字值,它將產生正確的結果。例如值 4 的“04”。
這是錯誤的
該loop beg指令依賴于CX暫存器。您只設定了CL暫存器。你也需要歸零CH。
該陣列定義為包含位元組,但是你的代碼處理的話通過與墊款雙字!使一切都變成位元組大小。
這太復雜了
編碼:
push bx lea bx, counter mov ax, [bx] inc ax mov [bx], ax pop bx
只是 inc counter
這是一個解決方案
下面的代碼將輸入的數字留在 中AL,因此它可以用于CX計算回圈的迭代次數。
call StrToNumber ; -> AL is the inputted number e.g. 04
mov cx, 7 ; 7 elements in the array
lea bx, array
beg:
cmp [bx], al
jnl skip ; Skip if element is not less than inputted value
inc counter ; Count elements that are less than inputted value
skip:
inc bx ; BYTE sized elements
dec cx
jnz beg
如果你需要在螢屏上顯示一些數字,我在這個 Q/A Displaying numbers with DOS 中準備了一個很好的解釋(帶代碼)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/313720.html
