組合語言 數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進位制數並顯示的功能

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

組合語言 兩個2位的十進位制數相乘,要求結果用十進位制數輸出,求

轉頭空夢 你十進位制數十已經知道捏 還是 還不知道 如果知道的話 直接轉換成 十六進位制 然後 開始乘法程式 18乘以40 即 12h 28hdata segment tab db 12h tbb db 28h may db 10 dup data ends code segment assume ...

組合語言16位除法子程式,怎麼讀不懂啊用數帶進去算

div0 mov dptr,0 除法子程式 div1 clr c mov a,suml 被除數低位送a subb a,73h 減除數低位 mov b,a 餘數送b mov a,sumh 被除數高位送a subb a,72h 減除數高位 jc div2 有借位則退出 已經運算完成 inc dptr d...