組合語言 數16進位制的數的位是1的個數,必須用巨集和子程式。懂的人來(網上有是錯的,貼上勿擾)

時間 2021-11-04 06:17:21

1樓:做而論道

;組合語言:數一個16進位制的數的位是1的個數,必須用巨集和子程式。

;;例如如下:(螢幕上如下顯示【12ab是隨便輸入的一個16進位制數,7是答案】)please input a number in hex from 0000h to ffffh: 12abthere are 7 bit(s) in number 12ab.

;;-------------------------------------------

out_str macro *** ;巨集定義

lea dx, ***

mov ah, 9

int 21h

endm

;-------------------------------------------

dseg segment

msg_1 db 10, 13, 'please input a number in hex from 0000h to ffffh: $'

msg_2 db 10, 13, 'there are $'

msg_3 db ' bit(s) in number $'

msg_e db 10, 13, 'input error. $'

x0 dw 0

n dw 0

in_temp db ?

dseg ends

;------------------------------------

cseg segment

assume cs:cseg, ds:dseg

start:

mov ax, dseg

mov ds, ax

;------------------------

out_str msg_1 ;顯示提示資訊

mov cx, 4

;-------------------

lb_1:

mov ah, 1

int 21h ;輸入一個字元

cmp al, 0dh ;是[回車]?

jz next1

cmp al, '0' ;小於'0'?

jb lb_no

cmp al, '9' ;大於'9'?

ja a_f

and al, 0fh

jmp zzzz

a_f:

cmp al, 'a' ;小於'a'?

jb lb_no

cmp al, 'f' ;大於'f'?

ja lb_no

sub al, 37h

zzzz:

mov in_temp, al

mov ax, x0

mov bx, 16

mul bx

mov bl, in_temp

mov bh, 0

add ax, bx

mov x0, ax

loop lb_1

;-----------------------------------

next1:

mov ax, x0

mov cx, 16

***x:

test ax, 8000h

jz cccc

inc n

cccc:

add ax, ax

loop ***x

;-----------------------------------

out_str msg_2 ;顯示提示資訊

mov ax, n

mov bx, 10 ;

call out_ax

out_str msg_3 ;顯示提示資訊

mov ax, x0

mov bx, 16 ;

call out_ax

mov dl, '.'

call putc

jmp exit

;------------------

lb_no:

out_str msg_e ;顯示提示資訊

;------------------------

exit:

mov ax, 4c00h

int 21h

;------------------------------

out_ax proc ;

or ax, ax

jz _0_

loop_p:

xor dx, dx

div bx

mov cx, ax ;

or cx, dx

jz _e_ ;

push dx ;

call loop_p

pop dx ;

cmp dl, 10

jb a30

add dl, 7

a30:

add dl, '0' ;

jmp _1_

_0_:mov dl, '0' ;

_1_:call putc

_e_:ret

out_ax endp

;------------------------------

putc proc

mov ah, 2

int 21h

retputc endp

;------------------------------

cseg ends

end start

;***********************************

程式執行效果如下:

c:\masm510> ee

please input a number in hex from 0000h to ffffh: 12ax

input error.

c:\masm510> ee

please input a number in hex from 0000h to ffffh: ffff

there are 16 bit(s) in number ffff.

c:\masm510> ee

please input a number in hex from 0000h to ffffh: 12ab

there are 7 bit(s) in number 12ab.

c:\masm510> ee

please input a number in hex from 0000h to ffffh: 3fe

there are 9 bit(s) in number 3fe.

2樓:匿名使用者

判斷最低位是否為1,是的話就計數加1。之後右移一位。重複16次。流程太概就是這樣,你慢慢寫吧

組合語言:數一個16進位制的數的位是1的個數.而且要求輸入的資料從0000h到ffffh 熱淚跪求!!!高分!

3樓:

;input:ax

;output:bx

cnt1in16 proc

push cx

mov cx,16

cntlop:

ror ax,1

adc bx,0

loop cntlop

pop cx

cnt1in16 endp

4樓:做而論道

這麼多的抄襲者呀!

沒有一個是抄對的。

正確的答案,原文在:

5樓:匿名使用者

迴圈移位16次,判斷第0為為1計數加1就可以了,呵呵,86彙編我不會,如果是51的話,我可以做

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

6樓:

轉化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個字元交換,依次類推。

7樓:待譃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

8樓:匿名使用者

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

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

9樓:匿名使用者

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

10樓:萬世流香

dec ch

cmp ch,0 ;這句忘了

jnz lop

什麼是16進製制,16進製制數是什麼?

16進製制就是每滿十六就進一位的計數進制法。16進製制有0 f十六個數字,它為表示十到十五的數字採用了a b c d e f六個數字,它們和十進位制的對應關係是 a對應於10,b對應於11,c對應於12,d對應於13,e對應於14,f對應於15。而且,16進製制數和二進位制數間有乙個簡單的對應關係,...

用組合語言編寫求數的平均數,用組合語言編寫求三個數的平均數

孟靜渠思雨 data segmentxdw 345y dw234zdw 234m dw897ndw 999 定義五個數rdw 2dup 儲存結果 data ends code segment assume cs code,ds data start movax,data movds,ax movax...

16進製制的數的拆分,16進製制轉換二進位制分成三個數

a c121 b left a,2 c right a,2 那麼b就是c1了,c就是21了。vb裡好象有些型別轉換函式,可以先把c121換成字元型的,然後擷取,再分別轉換成數值的,ok?stm32中如何將16進製制數拆分成2進製數 十六進製制數 轉換為 二進位制數 對應位替換就可以了。十六進製制 對...