实验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指令会影响flag寄存器标志位。
在debug中调试,观察数据段中做128位加之前和加之后,数据段的值的变化。给出调试观察截
图。

 

 


2. 实验任务2
程序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

运行测试截图

回答问题
运行程序,从键盘上输入一串字符,以#结束(比如,输入George Orwell, 1984#),观察结
果。结合运行结果,理解代码并回答问题:
① 汇编指令代码line11-18,实现的功能是?

输入字符,判断是否等于#,如果等于#就je next跳转到next;如果不等于#就jmp s1 跳转到s1继续输入字符。
② 汇编指令代码line20-22,实现的功能是?

oah表示换行,实现换行。
③ 汇编指令代码line24-30,实现的功能是?

按顺序逐个输出刚才输入的字符。
3. 实验任务3

task3.asm源码

 1 assume ds:data, cs:code
 2 
 3 data segment
 4     x dw 91, 792, 8536, 65521, 2021,12
 5     len equ $ - x
 6 data ends
 7 
 8 code segment
 9 start:
10     mov ax, data
11     mov ds, ax
12 
13     mov cx, len/2
14 
15     s:
16         mov ax,ds:[di]
17         add di, 2
18 
19         push cx
20 
21         call printNumber
22         call printSpace
23 
24         pop cx
25     loop s
26 
27     mov ah, 4ch
28     int 21h
29 
30 printNumber:
31     mov bx, 0
32 
33     s1:
34         mov si, 10
35         mov dx, 0
36         div si
37 
38         push dx
39         inc bx
40 
41         cmp ax,0
42         jne s1
43 
44 
45     mov cx, bx
46 
47     s2:
48         pop dx
49         add dl, 30h
50         mov ah, 2
51         int 21h
52     loop s2
53 
54     ret
55 
56 
57 printSpace:
58     mov ah, 2
59     mov dl, 20h
60     int 21h
61     ret
62 
63 code ends
64 end start

运行测试截图

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 stack segment
 8     db 8 dup(?)
 9 stack ends
10 
11 code segment
12 start:
13     mov ax, data
14     mov ds, ax
15     mov si, 0
16     mov cx, len
17     call strupr
18     call printStr
19 
20     mov ax, 4c00h
21     int 21h
22 
23 
24 strupr:
25     push cx
26     push si
27     transform:
28         mov al, ds:[si]
29         cmp al, 97
30         jl continue
31         cmp al, 122
32         jg continue
33         and al, 0dfh
34         mov ds:[si], al
35     continue:
36         inc si
37         loop transform
38 
39     pop si
40     pop cx
41     ret
42 
43 
44 printStr:
45     push cx
46     push si
47 
48     print:
49         mov ah, 2
50         mov dl, ds:[si]
51         int 21h
52         inc si
53     loop print
54 
55     pop si
56     pop cx
57     ret
58 
59 code ends
60 end start

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

call strupr调用之后

 

 


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,以及输入其他字符,运行结果截图)

 

 

程序的功能是?

判断输入得字符是否为7, 是7 输出yes ,不是7 输出no。

posted @ 2021-12-13 15:26  Yurnero-  阅读(43)  评论(1)    收藏  举报