此程式實現原碼的加法運算

2021-06-01 22:49:49 字數 3220 閱讀 6985

;此程式實現原碼的加法運算

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