答案在最後面
有兩個答案,建議直接看第二個
div bx ;ax/bx ,商存在ax中,餘數存在dx中
add dx,30h ;由題意得要+30h
mov [si],dx ;把該值存到記憶體data segment
mov cx,ax
jcxz k ;用cx判斷是否跳出此迴圈
inc si ;迴圈加一
inc cx ;該步驟非常具有啟發性
;因為loop需要讓cx-1,所以如果cx此時是1的時候
;它就會直接返回了,而不是繼續執行多一次迴圈
;注意,我們在這個步驟需要的是從jcxz處跳出迴圈
loop s
k:pop dx
pop si
pop cx
pop bx
pop ax
retshow_str:
push dx
push cx
push ds
push si
mov ax,0b800h
mov es,ax ;0b800h是用於控制向螢幕輸出的一段記憶體
;一共25*80*2個字
mov al,160 ;每行160個字
mul dh
mov bx,ax
mov al,2 ;每個單元2個字
mul dl
add bx,ax
mov al,cl
skir:
mov cx,[si]
jcxz ok
mov dx,[si]
mov es:[bx],dx ;第乙個字放內容
mov es:[bx+1],al ;第二個字放顏色屬性
inc si
add bx,2
loop skir
ok:pop si
pop ds
pop cx
pop dx
retcode ends
end start
寫到此處,可以將數字逆序輸出,如果需要正序輸出,再寫乙個子程式即可
——————————分割線————————————
補充乙個更好的做法
assume cs:code
data segment
db 10 dup(0)
data ends
code segment
start:mov ax,1266
mov bx,data
mov ds,bx
mov si,0
call dtoc
mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
dtoc: ;數值顯示的子程式定義
push dx
push cx
push ax
push si
push bx
mov bx,0
s1: mov cx,10d
mov dx,0
div cx
mov cx,ax
jcxz s2
add dx,30h
push dx ;先存入棧,為的是最後正序輸出
inc bx
jmp short s1 ;使用jmp就不會存在loop減一的問題
s2: add dx,30h
push dx
inc bx ;再進行一次棧操作(補充當"商為零而餘數不為零"時的情況)
mov cx,bx ;此時cx中就儲存了ds:00中的非零數字個數
mov si,0
s3: pop ax
mov [si],al ;從棧中取出來,這時就成為正序了
inc si
loop s3
okay: pop bx
pop si
pop ax
pop cx
pop dx
ret ;數值顯示的子程式定義結束
show_str:
push dx
push cx
push ds
push si
mov ax,0b800h
mov es,ax ;0b800h是用於控制向螢幕輸出的一段記憶體
;一共25*80*2個字
mov al,160 ;每行160個字
mul dh
mov bx,ax
mov al,2 ;每個單元2個字
mul dl
add bx,ax
mov al,cl
skir:
mov cx,[si]
jcxz ok
mov dx,[si]
mov es:[bx],dx ;第乙個字放內容
mov es:[bx+1],al ;第二個字放顏色屬性
inc si
add bx,2
loop skir
ok:pop si
pop ds
pop cx
pop dx
retcode ends
end start
王爽《組合語言》實驗十
實驗十 3.數值顯示 以下程式附帶測試程式 1 名稱 dtoc2 功能 將dword型資料轉變為表示十進位制數的字串,字串以0為結尾3 引數 ax dword型資料低字4 dx dword型資料高字5 ds si指向字串的首位址6 返回 無 7 assume cs code 8data segmen...
組合語言 《組合語言》王爽 實驗一
從 1000 0 開始寫入命令 a 1000 0 mov ax,4e20 add ax,1416 mov bx,2000 add ax,bx mov bx,ax add ax,bx mov ax,001a mov bx,0026 add al,bl add ah,bl add bh,al mov a...
組合語言 王爽 實驗4
這學期在學彙編,沒怎麼自己動手程式設計過,結果到了中期編不出程式來,實在太尷尬了 特此來補各個實驗。4 11 0 200 0 20b 為什麼等同於 0020 0 0020b?0 200 0x16h 200 00200h 所以拆分成不同的形式即可轉換 assume cs code code segme...