組合語言,統計bx中1的個數,並在螢幕上以十六進製制形式顯示

2021-03-24 17:15:47 字數 6775 閱讀 8459

1樓:永恆

code  segment

assume cs:code

*** 100h

start:

push cs

pop ds

mov bx,x

mov al,0

mov cx,16

@1:shl bx,1  ; 邏輯移位通過進製標誌檢查1的個數jnc @2

inc al

@2:loop @1

mov bl,al   ; 將計數器的值 移入 bl 中mov bh,0

lea si,tab1

mov ah,2

mov dl,[bx+si]  ; 查表得到 數值bx 對應的ascii碼

int 21h

mov ah,4ch

int 21h

x     dw 01234h

tab1  db '0123456789abcdefg'  ;顯示g時表示是16個1

code  ends

end start

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

2樓:匿名使用者

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

3樓:萬世流香

dec ch

cmp ch,0 ;這句忘了

jnz lop

4樓:匿名使用者

程式沒錯呀,我直接複製過來,用ma**6.15編譯成功,執行正確。

用組合語言編寫乙個程式,統計暫存器ax中二進位制「1」的個數,結果一位十六進製制數的形式顯示

5樓:楊_劉

;程式已實抄

現,主要考慮的是怎樣獲取1的個數

;具體以怎樣的形式顯

示沒有太在意

;個數存在bl中,若想以各種形式顯示,呼叫不同的子函式即可(現在各種進製轉換的彙編**網上一堆)

code segment

assume cs:code

start:

mov ax,1234

mov bl,0;統計1的個數

mov cx,16;迴圈次數

loop1:

test ax,8000h;不斷的左移,與8000h比較獲取1的個數jnz loop2

inc bl

shl ax,1

loop2:

loop loop1

;輸出1的個數

mov dl,bl

add dl,30h

mov ah,02h

int 21h

mov ah,4ch

int 21h

code ends

end start

6樓:幸運者二號

mov cx,16

;bx中統計ax中1的個數

mov bx,0

;迴圈左移16次

s0:rol ax,1

jnc s1

inc bx

s1:loop s0

7樓:

clcmov bl,0

mov cx,16

lab:

shl ax,1

adc bl,0

loop lab

統計al中「1」的個數,並將結果在螢幕上顯示,用組合語言簡易編寫,急等!!!

8樓:匿名使用者

name example

data segment

n db 0

data ends

code segment

assume cs:code,ds:datastart: mov ax,datamov ds,ax

mov al,3

mov bl,0000001

mov cl,8

lop: and al,blje next

inc n

next: dec cl

shl bl

loop lop

mov ah,4ch

int 21h

code ends

end start

試用組合語言編寫乙個程式,把存放在bx暫存器內的值(二進位制數)用十六進製制數的形式在螢幕上顯示出來。

9樓:萬世流香

data segment

str db 'h',0ah,0dh,'$'

code segment

assume cs:code,ds:datastart: mov ax,data

mov ds,ax

mov bx,1111110111100001bmov ch,4 ;迴圈四次

lop: mov cl,4

rol bx,cl ;每次迴圈環左移四位mov dx,bx

and dl,0fh ;每次取低四位,來表示乙個十六進數

add dl,30h ;轉化成為assic碼cmp dl,3ah ;判斷dl是否大於10的assic碼(a+30h)62616964757a686964616fe4b893e5b19e31333262376665

jb next

add dl,7 ;大於10再加上7next: mov ah,2

int 21h

dec ch

jnz lop

mov dx,offset str

mov ah,9

int 21h

mov ah,4ch

int 21h

code ends

end start

組合語言怎樣將記憶體中的資料在螢幕上以十六進製制形式顯示出來

10樓:匿名使用者

組合語言將記憶體中的資料在螢幕上以十六進製制形式顯示出來,涉及記憶體資料讀取、數制轉換、顯示控制等,參見以下程式:

data segment

total dw abcdh

data ends

code segment

assume cs:code,ds:datamain proc far

start: mov ax,data

mov ds,ax

mov bx,total

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

mov ah,4ch

int 21h

retmain endp

11樓:做而論道

如果是字元的話輸出的還是16進製制數嗎?

我現在要寫乙個排序的程式,想把排序之前和之後的資料顯示出來-----------

可以參考乙個現成的:

12樓:夜隱霜華

先將資料轉換成對應的abcii碼,用dos呼叫輸出

13樓:匿名使用者

dos 功能呼叫,查查就知道了。書上都講的很清楚,輸出什麼格式的需要呼叫幾號功能,輸出的資料放在**之類的

微機原理與接**術 編寫1個程式,統計暫存器ax中二進位制位1的個數,結果以1位十六進製制數形式顯示到螢幕上

14樓:匿名使用者

code segment

assume cs:code

start:

mov ax,0ffffh ;測試用的,你可以修改為任何有效的值

mov cl,16 ;ax是乙個字,有16位二進位制

mov dl,0 ;用於累加ax中1的個數

a:rol ax,1 ;迴圈左移1稱,16次迴圈後復原

jnc next ;該位是0,則cf=0,這裡就是測試cf的值,為0則跳轉不累加

inc dl ;cf=1時,dl+1

next:

loop a ;迴圈結構

add dl,30h ;將dl的值轉為ascii碼

cmp dl,'9' ;大於9則是a-f或者10

jbe print ;小於或者等於0則不必再轉化ascii碼

add dl,7 ;如果是a-f則轉化

cmp dl,'f' ;這步關鍵,如果ax的值是0ffffh,則dl=16=10h,沒有這步將會輸出g

ja print_10 ;ax=0ffffh則跳轉進行特殊處理

print:

mov ah,02h

int 21h

print_10:

mov dl,31h ;特殊情況只有一種,即dl=10h,故只要兩次分別輸出字元1和0即可

mov ah,02h

int 21h

mov dl,30h

int 21h

mov ah,4ch

int 21h

code ends

end start

15樓:匿名使用者

assume cs:code, ds:datadata segment

tb db '0123456789abcdef'

data ends

code segment

start:

mov ax, data

mov ds, ax

mov ax, 3ch

mov cx, 16

xor bx, bx

nx:rol ax, 1

test al, 1

jz zero

inc bx

zero:

loop nx

mov ax, bx

lea bx, tb

xlat

mov ah, 2

mov dl, al

int 21h

mov ax, 4c00h

int 21h

code ends

end start

組合語言資料偽指令DUP用法,組合語言中的dup有什麼作用

茲斬鞘 10 dup 1 重複定義了10個字元素,初始值為1,佔用10 2 20個位元組。5 dup 重複定義了5個字元素 其初始值實際為0 佔用5 2 10個位元組 因此總共佔用30個位元組。具體分析 在彙編定義變數的時候會用到dup,變數名 型別 初值表,dup用於把一個相同值賦值若干次,重複次...

組合語言中符號的意思是什麼,在組合語言裡 符號代表什麼意思?

看圖你就會明白。實際上標號x1的首地址為ascii碼c的字單元地址,x2的首地址開始於 db 16 dup 語句,緊接著x1的終止地址,那麼它的首地址相對於x1偏移4 1個位元組單元 x2的終止地址相對於其首地址偏移16 1個位元組單元,相對於x1偏移18個位元組單元。那麼 x1實際上是當前地址與x...

組合語言壓棧出棧延時問題,組合語言中的棧,壓棧,出棧是什麼意思

壓棧並不改變r2的值,外層迴圈中djnz r2一次,r2就減1,而push 則就是保持這個值在delay3實現延時。組合語言中的棧,壓棧,出棧是什麼意思 就像乙個裝桌球的盒子,只有乙個口能開啟 裡面乙個球不放,就是空棧 往裡面放乙個球,就是壓棧 從裡邊拿乙個球,就是出棧 都放滿了,就是滿棧,再放就會...