二進位制到十進位制轉換(組合語言)我看不明白

時間 2021-08-14 23:04:29

1樓:天氣雷達

1-mov dx,0

2-mov bx,10 ;除以10的原因:例如假設ax中的二進位制數=十進位制數1234

--------------那麼 1234/10 得餘數4(即得到個位數)

--------------這個時候即 餘數=原來個位數 這是一個關鍵

--------------因下面6-對應這句 123/10 會得到餘數=3

--------------即餘數=原來的十位數

3-div bx ;(32位/16位(看div的規定))商由ax儲存 餘數由dx儲存

--------------即現在dx=0005h

4-mov cx,0304h ; ch=03h(用於迴圈),cl=04h(用於迴圈移動)

5-ror dx,cl ; ror為迴圈右移指令(見後面) 迴圈右移4位的原因:

-------------- (1)用4位二進位制數表示1位16進位制數

-------------- (2)迴圈右移的是保護所得到的餘數,即保護個位

6-l1:div bl ;商/10 即123/10 等到11-對應指令跳轉到這裡時

-----------------會變成12/10 等等

-----------------div bl(16位/8位)後新的餘數被儲存到ah 商儲存到al

7-or dl,ah ;注意or在這裡的用法:為了保護完整6-所得的餘數

-----------------其實這時dl=0000

-----------------如果用and的話 會將餘數(四位二進位制數)中的1抹掉

8-ror dx,cl ;對應5-,保護剩下的十位,百位等

9-mov ah,0 ;清0 因為下次迴圈是用商/bl

---------------而商(16位/8位)是僅僅儲存在al中

10-dec ch ;ch=ch-1 對應上面 用於控制迴圈次數

11-jnz l1 ;迴圈跳轉

--------------迴圈裡共執行了3次ror dx,cl

--------------再加上迴圈前的5-,所以共執行了4次ror dx,4

--------------即是說原來dx結構 ddddccccbbbbaaaa

--------------執行5-後變成 aaaaddddccccbbbb

--------------第一次執行8- bbbbaaaaddddcccc

--------------第三次執行8-後恢復ddddccccbbbbaaaa結構

--------------而且aaaa=個位 bbbb=十位 等等

--------------問題出現了: 呵呵 照這樣推理 dddd=千位

--------------那麼萬位儲存在**呢

--------------偶試驗的結果是儲存到了al(ax)中

ret ;結束返回

-------------------------------

-------------------------------

左移1位相當*2: 是shl指令

例如:mvo al,6

shl al,1

結果: al=0c

-------------------------------

右移1位相當/2: 是shr指令

例如:mov al,6

shr al,1

結果:al=3

------------------------------

指令ror: 迴圈右移

例如:mov al,10011100

ror al,1

結果: al=01001110

------------------------------

指令rol: 迴圈左移

例如:mov al,10011100

ror al,1

結果: al=00111001

------------------------------

2樓:匿名使用者

二進位制轉換為十進位制

將每個二進位制數按權後求和即可。請看例題:

把二進位制數(101.101)2=1*22+0*21+1*20+1*2-1+0*2-2+1*2-3=(5.625)10

3樓:錯名

哎 本來回答過一次 竟然沒通過稽核 換個號再來其實是你理解錯了

因為在計算機中數本來就是二進位制儲存的

所以題目的意思是把一個數值這樣大的數轉換為十進位制的形式 比如數15 在計算機中儲存形式為0000000000010111b,題目的意思就是轉換為0015h 的形式

所以題目的演算法就是 每次對10求模 餘數是存在dx裡的迴圈右移4位 一共移4次 這樣就能把四次求餘的結果從右向左排列16位題目就是這個意思 不知你理解沒有 呵呵

祝你好運

4樓:

二進位制轉換成十進位制很容易就時從右側的第一位起算做2的0次冪,第二位時2的一次冪,第三位時2的二次冪。。。一次類推再用相應位數的二進位制嗎與他們對應相乘再家和就可以了比如說吧!

11101001=1*2(7)+1*2(6)+1*2(5)+0*2(4)+1*2(3)+0*2(2)+0*2(1)+1*2(0)其中括號裡面的數時冪次,再加和就是十進位制了。至於左移一位為乘二是這樣來的那簡單的11來說吧他的十進位制是1*2(1)+1*2(0)左移一位就是110十進位制值是1*2(2)+1*2(1)+0*2(0)也就是2(1)+1和2(2)+2(1)後面的這個提取公因式2(1)相除剛好得二!也就是左移一位相當於乘2

5樓:上世的煙蝶

你以十進位制的數除以你所要轉換的進位制數,把每次除得的餘數記在旁邊,所得的商數繼續除以進位制數,直到餘數為0時止.例如你要把100轉換成八進位制:

100/8=12...(餘數為4);

12/8=1.....(餘數為4);

1/8=0......(餘數為1);

然後把相應的餘數從低向高順著寫出來,如上的為144,此即為100的八進位制表示形式.

十進位制轉換為十六進位制與二進位制與前面的轉化為八進位制相同,如100轉換為十六進位制:

100/16=6....(餘數為4);

6/16=0......(餘數為6);

同理則以十六進位制表示的100形式為64;

100轉換為二進位制:

100/2=50....(餘數為0);

50/2=25.....(餘數為0);

25/2=12.....(餘數為1);

12/2=6......(餘數為0);

6/2=3.......(餘數為0);

3/2=1.......(餘數為1);

1/2=0.......(餘數為1);

所以100的二進位制表示形式為1100100;

要換回來就反著算!

6樓:匿名使用者

看著很難的樣子...

學習學習...

組合語言,把二進位制轉為十進位制顯示輸出,怎麼寫,什麼思路,不懂,求大神講解

7樓:做而論道

一個二進位制數字:0~65535。

要分離出來十進位制的:個、

十、百、千、萬,分別是 0~9。

在顯示前,還要變成對應的 ascii 碼。

參考。

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

8樓:匿名使用者

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進位制顯示在螢幕上。

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

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

9樓:匿名使用者

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)以十六進位制顯示在螢幕上。準確的說法是:

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

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

二進位制十進位制轉換公式,二進位制轉十進位制公式

比如10進位制的15轉換2進位制 用15除以2,商為7,餘數為1,再用7除以2,商為3,餘數為1,再用3除以2,商為1,餘數為1,再用1除以2,商為0,餘數為1,最後吧餘數倒過來排列就為二進位制的1111 即商為0時的1,商為1時的1,商為3時的1,商為7時的1 二進位制轉十進位制。以二進位制的11...

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

做而論道 判斷某個位,用 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...

二 十進位制轉換器,二進位制 十進位制轉換

我的喵呀,我進入了一個大佬的世界呀。二進位制 十進位制轉換 在講轉換之前,我們來了解下兩種進位制的概念。十進位制是我們從小就開始學習的,可以說非常熟悉,之所以使用這麼廣泛,很有可能跟我們有十根手指有關。所謂 十進位制 就是 二進位制在生活中可以說基本用不到,但是它是計算機底層的編碼組成,就是所謂的機...