实验4 8086标志寄存器及中断
任务一:
调试结果,成功完成数据段中128位相加

line31-34的4条inc指令
不能替换为add指令
原因:使用add会导致进位寄存器CF的值发生变化。NC->CY;
而inc指令不会改变进位寄存器CF的值.
任务二:
运行结果:

1.汇编指令代码line11-18,实现功能:
从键盘上读取输入的字符,并保存到ds:[si],每读入一个就判断是否为'#',如果是则不保存,转跳至标号next处执行;
如果不是则si + 1并继续读入下一个字符。
2.汇编指令代码line20-22,实现功能:
换行
3.汇编指令代码line24-30,实现功能:
打印'#'之前的输入内容
任务三:
运行结果:

代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
assume ds:data, cs:code, ss:stackdata segment x dw 91,792,8536,65535,2021,0 len equ $ - xdata endsstack segment dw 8 dup(?)stack endscode segmentstart: mov ax, data mov ds, ax mov ax, stack mov ss, ax mov sp, 16 mov cx, len/2print: mov ax, word ptr ds:[di] add di, 2 push cx call printNumber call printSpace pop cx loop print mov ah, 4ch int 21hprintNumber: mov bx, 0 s1: mov bp, 10 mov dx, 0 div bp push dx inc bx mov cx, ax inc cx loop s1 mov cx, bx s2: pop dx add dl, 30h mov ah, 2 int 21h loop s2 retprintSpace: mov ah, 2 mov dl, 20h int 21h retcode endsend start |
任务四:
运行结果:

代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
assume cs:code,ds:datadata segment str db "assembly language, it's not difficult but tedious"len equ $ - strdata endsstack segment db 8 dup(?)stack endscode segmentstart: mov ax, data mov ds, ax mov si, 0 mov cx, len call strupr call printStr mov ax, 4c00h int 21hstrupr : push cx push si transform: mov al, ds:[si] cmp al, 97 jl continue cmp al, 122 jg continue and al, 0dfh mov ds:[si], alcontinue: inc si loop transform pop si pop cx ret printStr: push cx push si print: mov ah, 2 mov dl, ds:[si] int 21h inc si loop print pop si pop cx ret code endsend start |
任务五:


该代码功能:
判断输入字符是否为7
是;在屏幕右侧输出yes
否;在屏幕右侧输出no
任务六:
运行结果:

浙公网安备 33010602011771号