方法一:通過比較法實現轉換
.486
cmpdisp macro nn ;十進位制逐位輸出,dl儲存的就是每一位的值
local last,next
mov dl,0
last:cmp bx,nn
jc next
inc dl
sub bx,nn
jmp last
next:add dl,30h
mov ah ,2
int 21h
endm
;-------------------------------------
data segment use16
msg1 db 'please input a 16-bit binary number',0dh,0ah,'$'
data ends
;-------------------------------------
code segment use16
assume cs:code,ds:data
beg: mov ax,data
mov ds,ax
mov ah,9
mov dx,offset msg1 ;顯示提示標誌,請輸入
int 21h
mov cx,16
mov bx,0 ;bx作為儲存轉換後的值
again:mov ah,1
int 21h ;逐個鍵入
sub al,30h
shl bl,1
add bl,al ;將資料存入到bl中,
cmp cx,9 ;bl是最多儲存8位(9-16),如果超過8位,把bl向bh移動
jz move
loopa:loop again
mov ah,2 ;比較法實現二進位制轉十進位制
mov dl,'='
int 21h
cmpdisp 10000 ;由於最多16位,最大是65536,所以從10000開始比較
cmpdisp 1000
cmpdisp 100
cmpdisp 10
cmpdisp 1
jmp exit
exit: mov ah,4ch
int 21h
move proc
mov bh,bl
mov bl,0
jmp loopa
move endp
code ends
end beg
方法二:除10取餘法實現將二進位制轉換為十進位制
模板:
.586
code segment use16
assume cs:code
num dw 1234h
beg: mov ax,num
mov bx,10
mov cx,0
last:mov dx,0
div bx ;(dx,ax)-<(dx,ax)/src
push dx ;餘數壓站
inc cx ;統計除法的次數
cmp ax,0 ;商不為0,就繼續除
jnz last
aga: pop dx ;餘數給dx
add dx,30h
mov ah,2
int 21h
loop aga
mov ah,4ch
int 21h
code ends
end beg
一次讀入整個二進位制檔案
1.開啟檔案 if fp fopen file name,rb null 2.得到檔案的長度 fseek ap fp,0l,seek end file size ftell fp if 1l file size 3.建立等大小的緩衝 char buffer char malloc file size...
一次讀入整個二進位制檔案
1.開啟檔案 if fp fopen file name,rb null 2.得到檔案的長度 fseek ap fp,0l,seek end file size ftell fp if 1l file size 3.建立等大小的緩衝 char buffer char malloc file size...
組合語言 簡單的16位二進位制相加程式
這可以說是第乙個我自己寫的匯程式設計序,雖然很短。功能很簡單,實現兩個16位二進位制數相加即可。下面是實現功能的相應 dseg segment data 1 dw data 2 dw dseg ends sseg segment stack top ptr db 20 dup 0 sseg ends...