輸入乙個數n,然後列印出2的n次方

2021-05-22 11:06:39 字數 2051 閱讀 6464

輸入乙個數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 直接找 ...