組合語言(二十一)之數值交換與自增

2021-09-07 15:09:12 字數 3279 閱讀 1798

輸入兩個數,如果第乙個數為偶數第二個數為奇數,互換位置;如果兩個數都是奇數,則兩個數都加一

程式執行:

mov ax,datas ;初始化ds

mov ds,ax

;輸入a提示

lea dx,inputa

mov ah,9

int 21h

;輸入a

lea dx,a_string

mov ah,10

int 21h

;a轉成十進位制數

lea si,a_string+1

call translate_to_number

mov a,ax

;輸入b提示

lea dx,inputb

mov ah,9

int 21h

;輸入b

lea dx,b_string

mov ah,10

int 21h

;b轉成十進位制數

lea si,b_string+1

call translate_to_number

mov b,ax

;將a、b移至ax,bx

mov ax,a

mov bx,b

test ax,1 ;判斷ax是否為偶數

jz even_number ;若為偶數,跳轉

test bx,1 ;判斷bx是否為偶數

jz next ;若為偶數,跳轉

inc ax ;否則,ax++,bx++

inc bx

jmp next ;跳轉

even_number:

test bx,1 ;判斷bx是否為偶數

jz next ;若為偶數,跳轉

xchg ax,bx ;將奇數移至ax

next:

mov a,ax ;儲存ax,bx

mov b,bx

lea dx,outputa ;輸出a、b

mov ah,9

int 21h

mov ax,a

call decimal

lea dx,outputb

mov ah,9

int 21h

mov ax,b

call decimal

retmain endp

;字串轉換為十進位制數

translate_to_number proc near

;si:lenght first

push cx

push dx

push bx

push si

push di

mov di,10

mov ax,0

mov cl,[si]

mov ch,0

cmp cx,0

jz err

inc si

tran:

mov bl,[si]

inc si

cmp bl,'0'

jb err

cmp bl,'9'

ja err

sub bl,30h

xor bh,bh

mul di

add ax,bx

loop tran

jmp exit

err:

lea dx,error_number

mov ah,9

int 21h

mov ax,4c00h

int 21h

exit:

pop di

pop si

pop bx

pop dx

pop cx

ret

translate_to_number endp

decimal proc near

push ax

push cx

push dx

push bx

cmp ax,0

jge plus

mov bx,ax

mov dl,'-'

mov ah,2

int 21h

neg bx

mov ax,bx

plus:

mov cx,0

mov bx,10

de:xor dx,dx

div bx

push dx

inc cx

cmp ax,0

jnz de

de1:

pop dx

add dl,30h

mov ah,2

int 21h

loop de1

pop bx

pop dx

pop cx

pop ax

ret

decimal endp

codes ends

end main

簡明C語言教程(二十一)自增自減運算子

前自增後自增 前自減後自減 相同 最終都使 i 的值加一 不同 前自增整體表示式的值是i加1之後的值 後自增整體表示式的值是i加1之前的值。include int main void result 4 4 3 4int i 3 printf d d d i i,i result 4 5 5有i 1 ...

王爽之《組合語言》學習重點十一

實驗五 編寫 除錯具有多個段的程式 1 將下面的程式編譯連線,用debug載入 跟蹤,然後回答問題 assume cs code,ds data,ss stack data segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h data...

組合語言(二十六)之自然數求和

輸入乙個數n,對1到n的所有自然數求和 程式執行 mov ax,datas 初始化ds mov ds,ax 輸入提示 lea dx,input mov ah,9 int 21h 輸入n lea dx,n string max length mov ah,10 int 21h 轉換成為數字 lea s...