輸入兩個數,如果第乙個數為偶數第二個數為奇數,互換位置;如果兩個數都是奇數,則兩個數都加一
程式執行:
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...