;要求:從鍵盤輸入乙個10進製數(不超過2000),然後輸出其二進位制數中 1 的個數。
;程式如下:
;******************************==
disp_str macro x ;巨集定義.
mov dx, offset x
mov ah, 9
int 21h
endm
;--------------------------------
data segment ;資料段.
msg1 db 13, 10, 'please input : $'
msg3 db 13, 10, 'the n(1) is : $'
x dw ? ;存放新輸入資料.
data ends
;--------------------------------i
code segment ;**段.
assume cs: code, ds: data
start:
mov ax, data
mov ds, ax
;--------------------------------
in_loop:
disp_str msg1 ;巨集呼叫,提示 please input :
;--------------------------------
mov x, 0 ;資料清零.
_inx:
mov ah, 1 ;輸入字元.
int 21h
;--------------------------------
cmp al, 13 ;回車?
je _in_end ;是則結束輸入.
cmp al, '0'
jb in_loop ;小於'0',不是數字.
cmp al, '9'
ja in_loop ;大於'9',不是數字.
sub al, '0' ;變成數字
mov cl, al
mov ch, 0 ;cx 就是新輸入的數字.
mov ax, x
mov bx, 10 ;老資料乘以10
mul bx
add ax, cx ;加上新資料.
mov x, ax ;儲存.
cmp ax, 2000 ;與2000比較
ja in_loop ;大於,就重新輸入
jmp _inx ;不大,就繼續輸入下一位數
;--------------------------------
_in_end:
disp_str msg3 ;巨集呼叫,提示 the n(1) is :
mov ax, 0
mov bx, x
mov cx, 16 ;判斷16位數.
dddd:
cmp bx, 8000h
jb eeee
inc ax ;個數加一.
eeee:
shl bx, 1 ;左移.
loop dddd ;cx-1,非零轉移.
;--------------------------------
disp: ;以十進位制顯示ax內容
mov bx, 10
mov cx, 0
d_1:mov dx, 0
div bx
add dl, '0'
push dx
inc cx
cmp ax, 0
jne d_1
mov ah, 2
d_2:pop dx
int 21h
loop d_2
;--------------------------------
mov ah, 4ch ;到此結束
int 21h
;--------------------------------
code ends
end start
;******************************==
程式經過編譯、連線後,執行效果如下:
c:\masm>_1_n
please input : 1998
the n(1) is : 8
c:\masm>_1_n
please input : 536
the n(1) is : 3
利用計算器,把 1998、536,變成二進位制數,可以看到,它們其中確實是有 8 個和 3 個 1。
大家再試試別的數字,看看做而論道編寫的程式是否正確。
;******************************=
原題**:
提問者對回答的評價:謝謝啊
;******************************=
輸入十進位制數,輸出其二進位制
include using namespace std intmain for i i 0 i return0 輸入乙個正整數,判斷其位數 intdig int num return counter include using namespace std intmain for i i 0 i re...
二進位制轉十進位制
二進位制轉十進位制方法很多,如字元陣列,指標法等 下面用字串函式的方法實現 二進位制轉十進位制 主要用 到 string函式性質及pow求乙個數的n次方的函式過載 by adengou 2010.08.04 win7 dev c 5.0 vs 2010 通過 include include incl...
二進位制與十進位制
人們在生產實踐和日常生活中創造了多種表示數的方法,這些數的表示規則稱為數制。例如人們常用的十進位制 計算機中採用的二進位制等。十進位制計數法的加法規則是 逢十進一 任意乙個十進位制可用0 1 2 3 4 5 6 7 8 9十個字元的組合表示,它的基數是 10。二進位制計數法的加法規則是 逢二進一 任...