輸入乙個數n,列印出2的n次方
; 有效輸入 n=0~24
; 用masm6.11編譯器編譯通過
; 編譯方法: masm /l %1.asm
; link /tiny %1.obj
;code segment
assume cs:code,ds:code
.386p
org 100h
start:
push cs
pop ds
again:
mov dx,offset string ;顯示提示
mov ah,9
int 21h
xor bp,bp ;bp清0
mov cx,2
input:
mov ah,0
int 16h ;接收乙個字元
cmp ah,1 ;esc退出程式
jz exit
cmp al,0dh ;回車結束輸入
jz ok
cmp al,'0' ;比0小重輸
jb input
cmp al,'9' ;比9大重輸
ja input
mov ah,0eh ;顯示有效輸入
int 10h
and al,0fh ;化為hex
cbwxchg bp,ax
mov bx,10
mul bx
add bp,ax
loop input ;接收下一字元
ok: call hex2asc
mov si,offset result
test bp,bp
jnz k2
mov word ptr [si],1 ;2^0=1
mov word ptr [si+2],0
jmp crt
k2: cmp bp,1
jnz k3
mov word ptr [si],2 ;2^1=2
mov word ptr [si+2],0
jmp crt
k3: cmp bp,24
ja again
dec bp
mov cx,bp
finit
fld num ; 2 入棧
@mul:
fimul num ;2^n
loop @mul
fstp result ;從棧上取出結果到result
crt:
mov dx,offset message
mov ah,9
int 21h ;顯示結果式
mov si,offset result
call show ;顯示 10 進製結果
jmp again
exit:
mov ah,4ch
int 21h
show: ;將雙字hex化為 n 進製並顯示
mov bx,n
xor cx,cx
q0:xor dx,dx
mov ax,[si+2]
div bx
mov [si+2],ax
mov ax,[si]
div bx
mov [si],ax
or dx,0e30h
inc cx
push dx
cmp ax,0
jnz q0
q1:pop ax
int 10h
loop q1
rethex2asc: ;將hex(0~99)化為十進位制
mov ax,bp
aamor ax,3030h
xchg ah,al
mov y,ax
retstring db 0dh,0ah,9,'input n=(0~24):$'
message db 13,10,9,'2^'
y dw ?
db '= $'
num dd 2 ;底數
result dd ? ;冪
n dw 10
code ends
end start
輸入乙個數判斷是否是2的N次方
當時去理解這段 num num 1 0時 將 按權與當成是 邏輯與進行運算 注意 取位址運算子和按權與得符號都是 取位址時直接符號後面加變數 如 a,b。按權與時後面需要跟乙個數,如a 1。按權與得優先順序小於 得優先順序,不要搞混!花了好長時間也沒搞懂到底是怎麼樣的運算邏輯,後來網上查了一下才知道...
java 判斷乙個數是否是2的n次冪
與運算操作方法 2的n次冪的特點 它的所有的因子都是2,它的二進位制表示形式只有乙個1 例如 a 0100 0000 a 1 0011 1111 a 0100 1000 a 1 0100 0111 分別進行與運算,如果是2的n次冪,則與結果為false。即執行結果為false的數,即不是2的n次冪,...
LeetCode 2n個數中重複n次的數
題目描述 在大小為 2n 的陣列 a 中有 n 1 個不同的元素,其中有乙個元素重複了 n 次。返回重複了 n 次的那個元素。示例 示例1 輸入 1,2,3,3 輸出 3 示例2 輸入 2,1,2,5,3,2 輸出 2 示例3 輸入 5,1,5,2,5,3,5,4 輸出 5 解題思路及 1 直接找 ...