組合語言程式設計將二進位制數轉換為16進位制數並顯示的功能

時間 2021-05-23 03:54:07

1樓:

轉化1個數為r進位制字串。

字串表示,採用除r取餘法,重複的計算n % r的餘數和n/r的商,依次得到r進位制的各個字元,值得注意的是,得到的r進位制的各個字元順序是從低位到高位,這和我們平時書寫的順序是相反的,為了和書寫順序保持一致,在最後階段需要將字串首尾交換。

步驟1: 將緩衝區首地址p和head

步驟2:

c取n除以r的餘數,即c=n % r

將c存入p處

p前進一個位置, 即p=p+1;

n取n除以r的商, 即n=n/r;

步驟3: 如果n大於0,繼續重複執行步驟2步驟4:

將字串倒置,即末字元和第1個字元交換,倒數第2個字元和第2個字元交換,依次類推。

2樓:待譃1生

a1 segment

main proc far

assume cs:a1

start: push ds

sub ax,ax

push ax

mov bx,0110110100110111bmov ch,4

b1: mov cl,4

rol bx,cl

mov al,bl

and al,0fh

add al,30h

cmp al,3ah

jl b2

add al,7h

b2: mov dl,al

mov ah,2

int 21h

dec ch

jnz b1

retmain endp

a1 ends

end start

3樓:匿名使用者

能加我一下嗎?我超想學彙編。qq674721534 msn :[email protected]

組合語言將二進位制轉化為十六進位制的功能 ,解釋下列**每一句在二進位制轉化為十六進位制中起到什麼作用

4樓:匿名使用者

main proc far

assume cs:a1

start: push ds

sub ax,ax

push ax

mov bx,0110 1101 0011 0111b ;6d37h

mov ch,4

b1: mov cl,4

rol bx,cl ;將bx中的數迴圈左移4位,也就是把bx最高4位,放到bx的最低4位上去。

mov al,bl ;將低8位放入al

and al,0fh ;取低4位

add al,30h ;加上30h 從這裡開始將4位二進位制數轉成16進位制ascii碼,

;0--的ascii碼是30h…9是39h,a是41h,b是42h…f是46h

cmp al,3ah ;加結果是不是少於3a

jl b2 ;是的話,表示是0-9之中數

add al,7h ;否則還要加上7,變成對應的a或b、c、d、e、f

b2: mov dl,al ;al是轉換好的一位16進位制數的ascii碼

mov ah,2

int 21h ;顯示到螢幕

dec ch

jnz b1 ;因為bx中其有4位16進位制數,所以要處理4次。這裡是判斷處理完4次沒,如果沒有,就繼續處理下一個數

retmain endp

a1 ends

end start

這個程式的功能是將bx中的0110 1101 0011 0111b(6d37h)以16進位制顯示在螢幕上。

「顯示在螢幕」的準確說法是:輸出到系統標準控制檯上。

不知道我說清楚沒,希望能幫到你

5樓:匿名使用者

main proc far

承擔cs:a1

start:push ds

sub ax,ax

的push ax

mov bx,0110 1101 0011 0111乙; 6d37h mov ch,4

rol bx,cl b1:mov cl,向左旋轉bx四,這是bx,bx最高4,最低的4最多。

mov al,bl低8到al

al,0fh;低4

add al,30h 30h耦合的4位二進位制數,從這裡到十六進位制的ascii** br /> - ascii碼30h ... 9 39h,a是41h,b是42h ... f 46h

cmp al,3ah增加的結果是不低於3a

jl b2;,那麼,這是0-9之間

add al,7h,否則加7,進相應的a或b,c,d,e,f

b2:mov dl,al,al mov ah是一個十六進位制數轉換好的ascii**

int 21h;顯示在螢幕上

dec ch

的jnz b1 bx是4個十六進位制數,所以要處理的四倍。這裡是判斷完沒有,如果沒有,繼續處理下一個數字

retmain endp

a1 end結束的開始

這個程式的功能是bx 0110 1101 0011 0111 b(6d37h)以十六進位制顯示在螢幕上。準確的說法是:

「顯示在螢幕上」輸出到系統的標準控制檯上。

不認識我,顯然沒有,我希望你能幫助

6樓:做而論道

在計算機裡面,二進位制和16進位制,是等效的,不需要轉換。

也不可能轉換。

可以發生變化的,只有顯示。

用組合語言程式設計實現二進位制數和十六進位制數之間的轉換。(要求鍵入被轉換數,轉換的結果要求從螢幕上顯示。

7樓:匿名使用者

dseg segment

hextb db '0123456789abcdef'

msg0 db 0dh,0ah, '**********menu***********',0dh,0ah

db '* 1.input binary number:*',0dh,0ah

db '* 2.input hex number:   *',0dh,0ah

db '* 3.exit                *',0dh,0ah

db '*************************',0dh,0ah,'$'

msg1 db 0dh,0ah,'input binary number:$'

msg2 db 0dh,0ah,'input hex number:$'

res1 db 0dh,0ah,'convert2hex number:$'

res2 db 0dh,0ah,'convert2bin number:$'

crlf db 0dh,0ah,'$'

dseg ends

cseg segment

assume cs:cseg, ds:dseg

start:

mov ax, dseg

mov ds, ax

m0:mov ah,9

lea dx, msg0

int 21h

mov ah, 7

int 21h

cmp al,'1'

jb m0

cmp al,'3'

ja m0

mov ah,0eh

int 10h

and al,0fh

cmp al,1

jz m1

cmp al,2

jz m2

cmp al,3

jz m3

m1:mov ah,9

lea dx, msg1

int 21h

call readbin

mov ah,9

lea dx, res1

int 21h

call printhex

jmp m0

m2:mov ah,9

lea dx, msg2

int 21h

call readhex

mov ah,9

lea dx, res2

int 21h

call printbin

jmp m0

m3:mov ah,4ch

int 21h

readbin proc near

mov bx, 0

mov cx, 16

b0:mov ah,7

int 21h

cmp al,0dh

jz b1

cmp al,'0'

jb b0

cmp al,'1'

ja b0

mov ah,0eh

int 10h

and ax,01h

shl bx,1

add bx,ax

dec cx

jnz b0

b1:ret

readbin endp

printbin proc near

mov cx,16

mov ah,0eh

p1:rol bx,1

mov al,bl

and al,1

xor al,30h

int 10h

loop p1

retprintbin endp

readhex proc near

mov bx,0

mov cx,404h

h0:mov ah,7

int 21h

cmp al,0dh

jz h6

cmp al,'0'

jb h0

cmp al,'9'

ja h1

mov ah,0eh

int 10h

and al,0fh

jmp h5

h1:cmp al,'a'

jb h0

cmp al,'f'

ja h2

mov ah,0eh

int 10h

sub al,37h

jmp h5

h2:cmp al,'a'

jb h0

cmp al,'f'

ja h0

mov ah,0eh

int 10h

sub al,57h

h5:shl bx,cl

add bl,al

dec ch

jnz h0

h6:ret

readhex endp

printhex proc near

mov cx,404h

mov ah,0eh

mov dx, bx

lea bx, hextb

p0:rol dx, cl

mov al, dl

and al,0fh

xlat

int 10h

dec ch

jnz p0

retprinthex endp

cseg ends

end start

如何使用組合語言將bx暫存器內的二進位制數用十六進位制數的形式在螢幕上顯示出來?

8樓:匿名使用者

disp proc near ;顯示16進位制數(字母大寫)子程式,入口:bx暫存器存有二進位制待顯示數

mov dl,bh

mov cl,4

shr dl,cl

cmp dl,10

jc hex1

add dl,30h

hex1: add dl,37h

mov ah,02h

int 21h

mov dl,bh

and dl,0fh

cmp dl,10

jc hex2

add dl,30h

hex2: add dl,37h

mov ah,02h

int 21h

mov dl,bl

mov cl,4

shr dl,cl

cmp dl,10

jc hex3

add dl,30h

hex3: add dl,37h

mov ah,02h

int 21h

mov dl,bl

and dl,0fh

cmp dl,10

jc hex4

add dl,30h

hex4: add dl,37h

mov ah,02h

int 21h

mov dl,48h

mov ah,02h

int 21h

retdisp endp

用組合語言將記憶體中的16位的有符號二進位制數轉換為十進位制ASC

1 在許多彙編書上均有例程,可參考一下。如 80 86 奔騰機組合語言程式設計 電子工業出版社 2 可以利用c的sprintf進行各種字串與資料的轉換 將其形成庫 然後在彙編下呼叫。這是一個比較簡單,功能也是最強的一個通用方法。下面是從ydebug v1.96 使用手冊裡取出來的32位轉換 很短,可...

組合語言程式輸入一位十進位制轉換為二進位制

做而論道 判斷某個位,用 test 指令更方便。data segment llll db 0000 data ends code segment assume cs code,ds datastart mov ax,data mov ds,ax mov ah,08h int 21h 如果輸入0 9s...

c語言將十進位制轉化為二進位制,c語言程式設計,如何將十進位制轉化為2進位制

十進位制轉二進位制可以使用庫函式itoa。itoa函式原型 char itoa int value,char string,int radix 功能 將任意型別的數字轉換為字串。在中與之有相反功能的函式是atoi。nt value 被轉換的整數,char string 轉換後儲存的字元陣列,int ...