实验4 8086标志寄存器及中断

实验4 8086标志寄存器及中断

实验任务1:

add指令零标志位为0,进位标志位为1;

Inc指令零标志位为0,进位标志位为0;

1.不可以更换,由于Inc不会对进位标志位产生改变,而add会改变进位标志位。在上面代码中使用adc做加法会加上进位标志位。

2.做加法前

加法后

 

 

 

 

实验任务2:

1.从键盘获取输入的字符,当输入字符为#时停止接收。

2.换行

3.将从键盘获取到的字符输出到屏幕上,

 实验任务3:

assume cs:code,ds:data,ss:stack
data segment
    x dw 91, 792, 8536, 65521, 2021
    len equ $ - x
data ends
stack segment
    str1 dw 5 dup(?)
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov si,offset x
mov cx,5
mov sp,10
s:
mov ax,ds:[si]
mov di,0

s1:
mov dx,0
mov bx,10
div bx
or dl, 30h
push dx
inc di
add ax,0
jne s1
s3:
mov ah, 2
pop dx
int 21h
dec di
cmp di, 0
jne s3
call printSpace
inc si
inc si
loop s
mov ah, 4ch
int 21h

printSpace:
mov dl,' '
mov ah,2
int 21H
ret

code ends
end start

 

实验任务4:

 

assume ds:data, cs:code
data segment
    str db "assembly language, it's not difficult but tedious"
    len equ $ - str
data ends

code segment
start:
    mov ax,data
    mov ds,ax
    mov si,offset str
    mov cx,len
s:
    call strupr
    loop s
    
    mov ax, 4c00h
    int 21h
strupr:
    mov al,ds:[si]
    cmp al,61h
    jb s1
    cmp al,7Ah
    ja s1
    and al,11011111B
s1:
    mov ds:[si],al
    
    
    inc si
    ret

code ends
end start

 

 

 

 实验任务5:

assume cs:code, ds:data

data segment
    str1 db "yes", '$'
    str2 db "no", '$'
data ends

code segment
start:
    mov ax, data
    mov ds, ax

    mov ah, 1
    int 21h

    mov ah, 2
    mov bh, 0
    mov dh, 24
    mov dl, 70
    int 10h

    cmp al, '7'
    je s1
    mov ah, 9
    mov dx, offset str2
    int 21h

    jmp over

s1: mov ah, 9
    mov dx, offset str1
    int 21h
over:  
    mov ah, 4ch
    int 21h
code ends
end start

 

 

 

 

 

 功能:对输入的字符进行判断,当输入7时,输出yes,当输入4时,输出no。

实验任务6:

 

 中断,收到中断信息后,会专区执行该中断信息的处理程序。

软中断,通过编号跳转到预先设置好的子程序中,子程序运行结束之后返回到原程序中的中断位置。

posted @ 2021-12-15 23:39  Mint-like  阅读(63)  评论(2)    收藏  举报