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實現延時。組合語言中的棧,壓棧,出棧是什麼意思 就像乙個裝桌球的盒子,只有乙個口能開啟 裡面乙個球不放,就是空棧 往裡面放乙個球,就是壓棧 從裡邊拿乙個球,就是出棧 都放滿了,就是滿棧,再放就會...