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

三、实验内容

1.实验任务

(1)task1.asm源码:

 1 assume cs:code, ds:data
 2 
 3 data segment
 4    x dw 1020h, 2240h, 9522h, 5060h, 3359h, 6652h, 2530h, 7031h
 5    y dw 3210h, 5510h, 6066h, 5121h, 8801h, 6210h, 7119h, 3912h
 6 data ends
 7 code segment 
 8 start:
 9     mov ax, data
10     mov ds, ax
11     mov si, offset x
12     mov di, offset y
13     call add128
14 
15     mov ah, 4ch
16     int 21h
17 
18 add128:
19     push ax
20     push cx
21     push si
22     push di
23 
24     sub ax, ax
25 
26     mov cx, 8
27 s:  mov ax, [si]
28     adc ax, [di]
29     mov [si], ax
30 
31     inc si
32     inc si
33     inc di
34     inc di
35     loop s
36 
37     pop di
38     pop si
39     pop cx
40     pop ax
41     ret
42 code ends
43 end start

(2)回答问题 :line31~line34的4条inc指令,能否替换成如下代码?你的结论的依据/理由是什么?

add si, 2
add di, 2

不能替换,程序中有adc指令需要使用cf标志位参与运算,inc指令不会影响cf的值,而add指令会使cf标志位发生变化。

(3)

相加前:实验4 8086标志寄存器及中断

 

 相加后:实验4 8086标志寄存器及中断

 

 

2.实验任务2

(1)task2.asm源码:

 1 assume cs:code, ds:data
 2 data segment
 3         str db 80 dup(?)
 4 data ends
 5 
 6 code segment
 7 start:  
 8         mov ax, data
 9         mov ds, ax
10         mov si, 0
11 s1:        
12         mov ah, 1
13         int 21h
14         mov [si], al
15         cmp al, '#'
16         je next
17         inc si
18         jmp s1
19 next:
20         mov ah, 2
21         mov dl, 0ah
22         int 21h
23         
24         mov cx, si
25         mov si, 0
26 s2:     mov ah, 2
27         mov dl, [si]
28         int 21h
29         inc si
30         loop s2
31 
32         mov ah, 4ch
33         int 21h
34 code ends
35 end start

(2)运行测试截图

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

 

(3)回答问题:

① 汇编指令代码line11-18,实现的功能是?

  让 用户输入一个字符,将其按顺序存放到data段,如果输入字符等于#则转移到next程序段,不等于则循环让用户继续输入下一个字符。

② 汇编指令代码line20-22,实现的功能是?

  输出一个换行。

③ 汇编指令代码line24-30,实现的功能是?

  循环输出data段里存放的所有字符

 

3.实验任务3

(1)task3.asm源码

 1 assume ds:data,cs:code
 2 data segment
 3     x dw 91,792,8536,65521,2021
 4     len equ $ - x
 5 data ends
 6 
 7 stack segment
 8     db 16 dup(0)
 9 stack ends
10 
11 code segment
12 start:    mov ax,data
13     mov ds,ax
14 
15     mov ax,stack
16     mov ss,ax
17     mov sp,10h
18     
19     mov si,0
20     mov cx,len/2   ;word型数据 长度除2
21 s:  push cx
22     mov ax,[si]
23     call printNumber
24     call printSpace
25     add si,2
26     pop cx
27     loop s
28 
29     mov ah,4ch
30     int 21h
31     
32 printNumber:
33     mov di,0
34 s1: mov dx,0
35     mov bx,0ah
36     div bx
37     push dx
38     inc di
39     cmp ax,0h
40     je s2
41     jmp s1    ;此处不要使用loop指令 会自动cx-1 但该程序段未使用cx 所以会受主程序里cx值的影响
42 
43 s2: mov cx,di
44 s3: pop ax
45     or al,30h
46     mov ah,2
47     mov dl,al
48     int 21h
49     loop s3
50     ret
51 
52 printSpace:
53     mov ah,2
54     mov dl,20h
55     int 21h
56     ret
57 code ends
58 end start

(2)运行测试截图

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

 

 

4.实验任务4

(1)task4.asm源代码

 

 1 assume ds:data,cs:code
 2 data segment
 3     str db "assembly language, it's not difficult but tedious"
 4     len equ $ - str
 5 data ends
 6 
 7 code segment 
 8 start:    mov ax,data
 9     mov ds,ax
10     
11     mov si,offset str
12     mov cx,len
13     call strupr
14     mov ah,4ch
15     int 21h
16 
17 strupr:    cmp byte ptr [si],61h
18     jb s
19     cmp byte ptr [si],86h
20     ja s
21     and byte ptr [si],11011111b
22     loop strupr
23     ret 
24 
25 s:    inc si
26     loop strupr    
27 code ends
28 end start

(2)运行测试截图

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

 

 

5.实验任务5

(1)task5.asm源码

 1 assume cs:code, ds:data
 2 
 3 data segment
 4     str1 db "yes", '$'
 5     str2 db "no", '$'
 6 data ends
 7 
 8 code segment
 9 start:
10     mov ax, data
11     mov ds, ax
12 
13     mov ah, 1
14     int 21h
15 
16     mov ah, 2
17     mov bh, 0
18     mov dh, 24
19     mov dl, 70
20     int 10h
21 
22     cmp al, '7'
23     je s1
24     mov ah, 9
25     mov dx, offset str2
26     int 21h
27 
28     jmp over
29 
30 s1: mov ah, 9
31     mov dx, offset str1
32     int 21h
33 over:  
34     mov ah, 4ch
35     int 21h
36 code ends
37 end start

(2)程序运行测试截图(输入7,以及输入其他字符,运行结果截图)

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

 

(3)程序的功能是?

 用户从键盘输入7时,会在屏幕第24行70列打印yes字符串,当输入其他字符时打印no.

 

6.实验任务6

(1)通过此项实现任务,你对中断、软中断实现机制的理解

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

 

软中断即是程序中通过 int 指令引起的,当设置一种中断程序时需要将其加入中断向量表,即该程序的入口地址,当程序执行时遇到int指令引发中断,cpu会获得中断号,再根据中断号×4即可得到中断程序段入口的段地址和偏移地址,进而执行中断程序。

 

上一篇:新版 animate.css 在vue中的正确使用


下一篇:实验4 8086标志寄存器及中断