实验内容
1) 求出首地址为DATA的20个字数组的最小偶数,并把它存放在AX中(p193 5.7)
2) 已定义两个整数变量A和B,试编写程序完成以下功能(p194 5.23)
若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中
若两个数均为奇数,则将两个数加1后存回原变量
若两个数均为偶数,则两个变量均不变源代码
1)
; multi-segment executable file template.
data segment
; add your data here!
pkey db "press any key...$"
arr dw 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
lea bx,arr
mov si,0
mov cx,20
loop1: ;先按顺序找出第一个偶数,放入ax中
test [bx]+si,1
jz putax
add si,2
loop loop1
jmp quit ;没找到则退出
putax:
mov ax,[bx]+si
add si,2
dec cx
loop2:
test [bx]+si,1
jz oushu
add si,2
dec cx
cmp cx,0
jz quit
jmp loop2
oushu:
cmp [bx]+si,ax
jl putax1
add si,2
dec cx
cmp cx,0
jz quit
jmp loop2
putax1:
mov ax,[bx]+si
add si,2
loop loop2
quit:
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
2)
; multi-segment executable file template.
data segment
; add your data here!
pkey db "press any key...$"
A dw 10H
B dw 11H
table dw r1
dw r2
dw r3
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov si,0
test A,1
jnz testB
add si,2
testB:
test B,1
jnz jump
add si,2
jump:
jmp table[si]
r1: ;0个偶数
inc A
inc B
jmp printit
r2: ;1个偶数
test A,1
jnz p2
mov ax,A
mov bx,B
mov A,bx
mov B,ax
p2:
jmp printit
r3: ;2个偶数
printit:
mov bx,A
mov ch,4
call print1
call print2
mov bx,B
mov ch,4
call print1
mov ax, 4c00h ; exit to operating system.
int 21h
ends
print1 proc near
rotate:
mov cl,4
rol bx,cl
mov al,bl
and al,0FH
add al,30H
cmp al,3AH
jl printit1
add al,7H
printit1:
mov dl,al
mov ah,2
int 21H
dec ch
jnz rotate
ret
print1 endp
print2 proc near
mov dl,0DH
mov ah,2
int 21H
mov dl,0AH
mov ah,2
int 21H
ret
print2 endp
end start ; set entry point and stop the assembler.