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

发布时间:2022-06-27 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了实验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

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

不能。

在debug中调试,观察数据段中做128位加之前和加之后,数据段的值的变化。给出调试观察截图。

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

 

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

2. 实验任务2 

程序task2.asm源码

 1 assume cs:code, ds:data
 2 data segment
 3         str db 80 dup(?);80个字节未初始化的内存空间
 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;int 21h中断的参数,表示输入单个字符
13         int 21h;调用中断例程
14         mov [si], al;将结果存入ds:[si]中
15         cmp al, '#';与'#'比对,影响标志寄存器ZF,运算结果为0表示相同,则ZF标志寄存器变为ZR
16         je next;if(al == '#'(ZF == ZR)) goto next
17         inc si;偏移地址加一
18         jmp s1;继续输入一个字符
19 next:
20         mov ah, 2;int 21h中断的参数,表示打印一个ASCII字符
21         mov dl, 0ah;换行
22         int 21h;调用中断例程
23          
24         mov cx, si;将输入的字符的数量(不包括#)赋给cx寄存器
25         mov si, 0;将si寄存器置零
26 s2:     mov ah, 2;int 21h中断的参数,表示打印一个ASCII字符
27         mov dl, [si];将ds:[si]出内存的值赋给dl
28         int 21h;调用中断例程
29         inc si;偏移地址+1
30         loop s2;循环,直到cx=0
31  
32         mov ah, 4ch;int 21h中断的参数,表示回到DOS
33         int 21h;执行中断例程
34 code ends
35 end start

运行测试截图

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

 

回答问题

运行程序,从键盘上输入一串字符,以#结束(比如,输入George Orwell, 1984#),观察结 果。结合运行结果,理解代码并回答问题:

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

输入字符,将字符存保存在ds:[si]中,然后将字符与‘#’比较,相同则跳转至next子程序,不同则继续执行s1。

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

调用中断程序然后换行。

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

将输入的字符数量存入寄存器cx,将ds:[si]的字符保存至显存区域实现字符打印。

3.实验任务3

task3.asm源码

 1 assume cs:code, ds:data, ss:stack
 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(?)
 9 stack ends
10 
11 code segment
12 start:
13     mov ax, data
14     mov ds, ax
15     mov ax, stack
16     mov ss, ax
17     mov sp, 16
18     mov si, offset x
19     mov cx, len/2
20     mov bx,10
21     call print
22 
23     mov ah,4ch
24     int 21h
25 
26 print:
27     mov ax, [si]
28  s1:mov dx,0
29     div bx
30     push dx;存余数dx
31     cmp ax,0ah;判断商大于等于10
32     jnb s1
33 
34 printNumber:
35 ;打印数字
36     push ax
37  s2:pop dx
38     or dx,30h
39     mov ah,2
40     int 21h
41     cmp sp,0eh
42     jne s2
43 
44 printSpace:
45 ;打印空格
46     mov dl, ' '
47     int 21h
48 
49     inc si
50     inc si
51     loop print
52     ret
53 
54 code ends
55 end start

运行测试截图

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

 4. 实验任务4

task4.asm源码

 1 assume cs:code, ds:data
 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:
 9     mov ax, data
10     mov ds, ax
11     mov si, offset str
12     mov cx, len
13     call strup
14 
15     mov ah,4ch
16     int 21h
17 
18 strup:
19     mov al,[si]
20     cmp al,61h
21     jb s
22     cmp al,7ah
23     ja s
24     sub al,20h
25     mov [si],al
26  s: inc si
27     loop strup
28     ret
29 
30 code ends
31 end start

在debug中调试截图( call strupr 调用之前,数据段的值,以及,调用之后,数据段的值)

实验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 start

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

程序的功能是?

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

 

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

 验证输入是否为7,并产生显示

6. 实验任务6 

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

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

自己选一个未被使用的中断码,实现一个中断例程,并调用测试。给出源码和运行测试截图。(选做 *) 如选做,请说明你使用的中断码,并描述你实现的这个中断例程的功能。

脚本宝典总结

以上是脚本宝典为你收集整理的实验4 8086标志寄存器及中断全部内容,希望文章能够帮你解决实验4 8086标志寄存器及中断所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: