我正在努力超越我的大學課程并自己學習匯編程式,所以我有點卡住了。
我有這個練習問題,我不明白如何正確列印。
我得到了 3 個數字值:var1、var2、var3。例如:var1 = 4、var2 = 5 和 var3 = 6。我還得到了一個陣列 nstr db 7 dup(' ')。
我需要做的是將 var1 var2 var3 添加到 nstr[5],將 var1 var2 添加到 nstr[4] 并將 var1 添加到 nstr[3] 并列印新陣列。
.model small
.STACK 100h
.data
var1 db 4
var2 db 5
var3 db 6
nstr db 7 dup(' ')
.code
.startup
mov ax, dgroup
mov ds, ax
mov si,6
mov nstr[si], '$'
dec si
mov al, var1
add al, var2
add al, var3
mov nstr[si], al
dec si
sub al, var3
mov nstr[si], al
dec si
sub al, var2
mov nstr[si], al
print:
mov ah, 09h
mov dx, offset nstr
int 21h
stop:
mov ah, 4ch
int 21h
end
每次我嘗試列印它時,控制臺都會顯示一個符號而不是數字。我知道我需要將數字轉換為字串,然后再將它們添加到陣列中。
我見過的唯一方法是將 div 乘以 10 并回圈遍歷數字,直到其中沒有剩余字符為止,然后將每個字符添加到陣列中。
我的問題是我需要在單個陣列位置上有一個兩位數,在這個例子中 nstr[5] 需要是 15,使用上面的方法我會得到 nstr[2] = 4, nstr[3] = 9 , nstr[4] = 1 and nstr[5] = 5,這不是我需要的結果,即使列印是正確的。
有沒有辦法完成這個行為?謝謝!
uj5u.com熱心網友回復:
每次我嘗試列印它時,控制臺都會顯示一個符號而不是數字。我知道我需要先將數字轉換為字串,然后再將它們添加到陣列中。
這就引出了一個問題:你為什么不進行轉換?
對于nstr[3]與nstr[4]僅僅另外有48人已經把數成可列印字符。
我見過的唯一方法是將 div 乘以 10并回圈遍歷數字,直到其中沒有剩余字符為止,然后將每個字符添加到陣列中。
您可以使用的不僅僅是十進制。如果您選擇十六進制,則可以解決該任務。
.data
var1 db 4
var2 db 5
var3 db 6
nstr db 7 dup(' ')
hexa db "0123456789ABCDEF"
.code
.startup
mov ax, dgroup
mov ds, ax
mov bx, offset hexa
mov si, 6
mov nstr[si], '$'
dec si
mov al, var1
add al, var2
add al, var3
xlatb
mov nstr[si], al
dec si
mov al, var1
add al, var2
xlatb
mov nstr[si], al
dec si
mov al, var1
xlatb
mov nstr[si], al
...
上面應該列印:
49F
或者,使用回圈列印 7 個陣列元素的內容:位元組大小的數字:
32, 32, 32, 4, 9, 15, 32
使用空格字符定義nstr陣列這一事實nstr db 7 dup(' ')并不一定意味著您必須將其用作字串。最終dup保留空間,僅此而已。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/352861.html
