彙編第一次實驗 16位二進位制對十進位制的轉換

2021-08-29 08:06:51 字數 1826 閱讀 8300

方法一:通過比較法實現轉換

.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...