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...