汇编语言实验3

  1. 实验内容
    1) 求出首地址为DATA的20个字数组的最小偶数,并把它存放在AX中(p193 5.7)
    2) 已定义两个整数变量A和B,试编写程序完成以下功能(p194 5.23)
    若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中
    若两个数均为奇数,则将两个数加1后存回原变量
    若两个数均为偶数,则两个变量均不变

  2. 源代码
    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.

猜你喜欢

转载自blog.csdn.net/qq_41579622/article/details/81633593