;此程式實現原碼的加法運算
datas segment
;此處輸入資料段**
string1 db 'the operate:$'
string2 db 'overflow$'
string3 db 'error! input again:$'
string4 db 'the result:$'
sdata1_h db 10h
sdata1_l db 01h
sdata2_h db 32h
sdata2_l db 09h
rdata_h db ?
rdata_l db ?
datas ends
stacks segment
;此處輸入堆疊段**
stacks ends
codes segment
main proc far
assume cs:codes,ds:datas,ss:stacks
start:
push ds
xor ax,ax
push ax
mov ax,datas
mov ds,ax
;此處輸入**段**
lea dx,string1
mov ah,09h
int 21h
input:
mov ah,01h
int 21h
cmp al,'+'
jz oadd
cmp al,'-'
jz osub
lea dx,string3
mov ah,09h
int 21h
jmp input
osub:
mov ah,sdata2_h
xor ah,80h
mov sdata2_h,ah
oadd:
mov ah,sdata1_h
and ah,80h
mov bh,ah;儲存被加數符號位
mov al,sdata2_h
and al,80h
xor ah,al
cmp ah,0
jz dadd
dsub:
call init
call nsub
jmp exit1
dadd:
call init
call nadd
exit1:
retmain endp
init proc near
mov ah,sdata1_h
and ah,7fh;清0被加數符號位
mov al,sdata2_h
and al,7fh;清0加數符號位
retinit endp
nadd proc near
push ax
push bx
push cx
push dx
mov ch,sdata1_l
mov cl,sdata2_l
add ch,cl
mov rdata_l,ch
adc ah,al
mov rdata_h,ah
and ah,80h
cmp ah,0
jnz exit2
and ah,7fh
or ah,bh
call print
jmp exit3
exit2:
mov dl,13
mov ah,02h
int 21h
mov dl,10
mov ah,02h
int 21h
lea dx,string2
mov ah,09h
int 21h
pop dx
pop cx
pop bx
pop ax
retexit3:
pop dx
pop cx
pop bx
pop ax
retnadd endp
nsub proc near
push ax
push cx
mov ch,sdata1_l
mov cl,sdata2_l
sbb ch,cl
mov rdata_l,ch
sbb ah,al
mov rdata_h,ah
and ah,80h
cmp ah,0
jz operate
call cmpt
operate:
call print
pop cx
pop ax
retnsub endp
cmpt proc near
push ax
push bx
mov ah,rdata_l
xor ah,0ffh
add ah,1
mov rdata_l,ah
mov ah,rdata_h
xor ah,0ffh
xor bh,80h
and ah,7fh
or ah,bh
mov rdata_h,ah
pop bx
pop ax
retcmpt endp
print proc near
push ax
push bx
push cx
push dx
mov dl,13
mov ah,02h
int 21h
mov dl,10
mov ah,02h
int 21h
lea dx,string4
mov ah,09h
int 21h
mov bl,rdata_l
mov bh,rdata_h
mov cx,16
peat:
rol bx,1
mov dl,bl
and dl,01h
add dl,30h
mov ah,02h
int 21h
dec cx
jnz peat
pop dx
pop cx
pop bx
pop ax
retprint endp
codes ends
end start
位運算 實現加法
用位運算實現加法也就是計算機用二進位制進行運算,32位的cpu只能表示32位內的數,這裡先用1位數的加法來進行,在不考慮進製的基礎上,如下 1 1 01 0 1 0 1 10 0 0很明顯這幾個表示式可以用位運算的 來代替,如下 1 1 01 0 1 0 1 10 0 0這樣我們就完成了簡單的一位數...
位運算 實現加法
用位運算實現加法也就是計算機用二進位制進行運算,32位的cpu只能表示32位內的數,這裡先用1位數的加法來進行,在不考慮進製的基礎上,如下1 1 01 0 1 0 1 10 0 0 很明顯這幾個表示式可以用位運算的 來代替,如下1 1 01 0 1 0 1 10 0 0這樣我們就完成了簡單的一位數加...
位運算實現加法
用位運算實現加法也就是計算機用二進位制進行運算,32位的cpu只能表示32位內的數,這裡先用1位數的加法來進行,在不考慮進製的基礎上,如下 1.1 1 0 2.1 0 1 3.0 1 1 4.0 0 0 很明顯這幾個表示式可以用位運算的 來代替,如下 1.1 1 0 2.1 0 1 3.0 1 1 ...