其他分享
首页 > 其他分享> > 实验4 8086标志寄存器及中断

实验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指令,能否替换成如下代码?你的结论的依据/理由是什么?

  add si, 2

  add di, 2

  不能替换,用add指令对si,di操作可能会影响CF位,CF位被影响后,adc命令中会产生错误的结果,而inc命令并不会影响CF位。

 

 

  做128位加之前,数据段值:

  

  做128位加之后,数据段值:

  

2. 实验任务2

此部分书写内容:

 

  

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

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

  从键盘上读入字符,存入到data段中,若输入字符为‘#’,则跳到next标号执行程序。

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

  在屏幕上打印换行符,实现换行。

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

  将data段中的内容打印到屏幕上。

3. 实验任务3

此部分书写内容:

 1 assume cs:code
 2 data segment 
 3     x dw 91, 792, 8536, 65521, 2021 
 4     len equ $ - x 
 5 data ends
 6 stack segment
 7 db 16 dup(0)
 8 stack ends
 9 code segment
10 start:
11     mov ax,data
12     mov ds,ax
13     mov ax,stack
14     mov ss,ax
15     mov sp,16
16     mov di,offset x
17 
18     mov ax,len ;长度为10,执行5次循环,除2
19     mov bl,2
20     div bl
21     mov ah,0
22 
23     mov cx,ax
24     s1:mov ax,[di] ;将data段里的值赋值给ax
25        mov bx,10 ;除数放在bx中
26        mov si,0
27        call printNumber
28        call printSpace
29        add di,2
30        loop s1
31 
32     mov ah,4ch
33     int 21h
34 
35 
36 printNumber:mov dx,0
37         div bx 
38         push dx ;余数存放在dx中
39         inc si ;入栈次数
40         cmp ax,0 ;商存放在ax中
41         je pp
42         jmp printNumber
43 pp:pop dx
44    mov ah,2
45    or dl,30h
46    int 21h
47 
48    dec si ;si减1
49    cmp si,0
50    je s
51    jmp pp
52 
53 s:ret
54 
55 printSpace:mov ah,2
56        mov dl, ' '
57        int 21h
58        ret
59     
60 code ends
61 end start

  

4. 实验任务

此部分书写内容:

 

  call strupr调用前,数据段的值:

  

  call strupr 调用后,数据段的值:

  

 

 

   运行结果如图:

  

 

 

5. 实验任务5

此部分书写内容:

 

  输入7:

  

  输入其他字符:

 

 

   

  输入一个字符,若输入字符为7,则将数据段中str1的内容显示,否则显示str2的内容,显示位置为第24行的第70列。

 

6. 实验任务6

 

此部分书写内容:

 

 

  执行task6_2的int 42命令后,cpu取得中断类型码42,并将IP设为42*4,CS设为42*4+2,由于执行task6_1后,系统中

  0:42*4+2所在地址的值已变为0,0:42*4所在地址的值已变为200h,所以程序将跳转到0:200h的地址处执行,

  该地址处存放的内容即时打印“welcome to 2049!”的代码,所以cpu会执行该处代码,显示打印内容。

 

标签:8086,中断,ah,mov,int,si,寄存器,ax,data
来源: https://www.cnblogs.com/tthxq/p/15658829.html