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

三、实验内容 1. 实验任务1  task41.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     mov ah, 4ch
15     int 21h
16 add128:
17     push ax
18 
19     push cx
20     push si
21     push di
22     sub ax, ax
23     mov cx, 8
24 s: mov ax, [si]
25     adc ax, [di]
26     mov [si], ax
27 
28     inc si
29     inc si
30     inc di
31     inc di
32     loop s
33 
34     pop di
35     pop si
36     pop cx
37     pop ax
38     ret
39 code ends
40 end start
回答问题 line31~line34的4条inc指令,能否替换成如下代码?你的结论的依据/理由是什么? 
1 add si,2
2 add di,2
答:不能,因为inc指令与add指令存在区别,inc指令不会改变cf的值,而add会。   在debug中调试截图: 实验4 8086标志寄存器及中断

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

做128位加之前:

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

做128位加之后:  实验4 8086标志寄存器及中断   2. 实验任务2 task42.asm源码:
assume cs:code, ds:data
data segment
        str db 80 dup(?)
data ends

code segment
start:
        mov ax, data
        mov ds, ax
        mov si, 0
s1:
        mov ah, 1
        int 21h
        mov [si], al
        cmp al, '#'
        je next
        inc si
        jmp s1
next:
        mov ah, 2
        mov dl, 0ah
        int 21h

        mov cx, si
        mov si, 0
s2:     mov ah, 2
        mov dl, [si]
        int 21h
        inc si
        loop s2

        mov ah, 4ch
        int 21h
code ends
end start
运行测试截图:   回答问题 ① 汇编指令代码line11-18,实现的功能是?  答:输入一个以#为末尾的字符串。 ② 汇编指令代码line20-22,实现的功能是?  答:输出一个换行符。 ③ 汇编指令代码line24-30,实现的功能是?  答:输入与输入相同的字符串。   3. 实验任务3 task4_3.asm源码:
 1 assume cs:code,ds:data
 2 data segment
 3     x dw 91, 792, 8536, 65521, 2021
 4     len equ $ - x
 5 data ends
 6 stack segment
 7     db 64 dup(0)
 8     top equ $+1
 9 stack ends
10 code segment
11 start:
12     mov ax,data
13     mov ds,ax
14     mov ax,stack
15     mov ss,ax
16     mov sp,top
17 
18     mov cx,len/2
19     mov bx,0
20 s1:  
21     mov ax,ds:[bx]
22     push bx
23     push cx
24     call printNumber
25     call printSpace
26     pop cx
27     pop bx
28     add bx,2
29     loop s1
30 
31     mov ah,4ch
32     int 21h
33 
34 printNumber:
35     mov bx,10
36     mov cx,0
37 s2:
38     mov dx,0
39     div bx
40     push dx
41     inc cx
42     cmp ax,0
43     jne s2
44 
45 s3:
46     mov ah,2
47     pop dx
48     or dl,30h
49     int 21h
50     loop s3
51     ret
52 
53 printSpace:
54     mov ah,2
55     mov dl,' '
56     int 21h
57     ret
58 
59 code ends
60 end start
运行测试截图 : 实验4 8086标志寄存器及中断

 

4. 实验任务4 task4.asm源码:
 1 assume cs:code,ds:data
 2 
 3 data segment
 4     str db "assembly language, it's not difficult but tedious"
 5     len equ $ - str
 6 data ends
 7 
 8 code segment
 9 start:
10     mov ax, data
11     mov ds, ax
12     mov si, offset str
13     mov cx, len
14     call strupr;
15     mov ax, 4c00h
16     int 21h
17 
18 strupr:
19     mov al, [si]
20     cmp al, 97
21     jb s
22     cmp al, 122
23     ja s
24     and al, 0dfh
25     mov [si], al
26   s:inc si
27     loop strupr
28     ret
29 code ends
30 end start
在debug中调试截图: 实验4 8086标志寄存器及中断

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

  5. 实验任务5 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 star
程序运行测试截图: 输入7: 实验4 8086标志寄存器及中断 输入其他字符: 实验4 8086标志寄存器及中断 程序的功能是:判断输入的字符是否是‘7’,如果是则输出yes,否则输出no。   6. 实验任务6 答:中断也是异常的一种,中断有硬中断(由硬件产生的中断)和软中断(软件产生的中断)之分。ARM有七种不同的中断源,在中断向量表中对应的地址范围是0X00 ~ 0X1C。 int是软中断指令,CPU执行int n指令,相当于引发一个n号中断的中断过程,执行过程如下:

1)取中断类型码n;

2)标志寄存器入栈,IF=0,TF=0;

3)CS、IP入栈;

4)(IP)=(n*4),(CS)=(n*4+2)。

上一篇:实验3 转移指令跳转原理及其简单应用编程


下一篇:Vi快捷操作 vim配置【shell文件格式从windows转换为linux】