first commit

This commit is contained in:
2025-05-27 16:03:52 +08:00
commit 2d22d07f60
223 changed files with 5842 additions and 0 deletions

Binary file not shown.

View File

@@ -0,0 +1,23 @@
DATA SEGMENT
NUM1 DD 11451400H
NUM2 DD 19198100H
SUM DD ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
start:
MOV AX, DATA
MOV DS, AX
MOV AX, WORD PTR NUM1
MOV WORD PTR SUM, AX
MOV BX, WORD PTR NUM2
ADD WORD PTR SUM, AX
MOV AX, WORD PTR NUM1+2
ADC WORD PTR SUM+2, AX
MOV AX, WORD PTR NUM2+2
ADD WORD PTR SUM+2, AX
MOV AH, 4CH
INT 21H
CODE ENDS
END start

View File

@@ -0,0 +1,36 @@
DSEG SEGMENT
XXX DW 1234H
YYY DW 5678H
ZZZ DD ?
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:MOV AX,DSEG
MOV DS,AX
MOV AX,XXX
XOR DX,DX
ADD AX,AX
ADC DX,0
ADD AX,AX
ADC DX,0
ADD AX,AX
ADC DX,0
ADD AX,AX
ADC DX,0
ADD AX,YYY
ADC DX,0
MOV WORD PTR ZZZ,AX
MOV WORD PTR ZZZ+2,DX
MOV AH,4CH
INT 21H
CSEG ENDS
END START

Binary file not shown.

BIN
Lab/Lab1/material/1-1.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
Lab/Lab1/material/1-2.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
Lab/Lab1/material/1-3.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

BIN
Lab/Lab1/material/1-4.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

23
Lab/Lab1/material/1.asm Executable file
View File

@@ -0,0 +1,23 @@
DATA SEGMENT
NUM1 DD 11451400H ; 被加数
NUM2 DD 19198100H ; 加数
SUM DD ? ; 结果
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
start:
MOV AX, DATA
MOV DS, AX
MOV AX, WORD PTR NUM1 ; 将NUM1低位赋给AX
MOV WORD PTR SUM, AX ; 将AX赋给SUM低位(MOV指令不能直接在两个内存单元间赋值)
MOV AX, WORD PTR NUM2 ; 将NUM2低位赋给AX
ADD WORD PTR SUM, AX ; 将AX加到SUM的低位上
MOV AX, WORD PTR NUM1+2 ; 将NUM1高位赋给AX
ADC WORD PTR SUM+2, AX ; ADC(Add with Carry)将AX加到SUM的高位(初始为零)上再加上CF存着的低位进位
MOV AX, WORD PTR NUM2+2 ; 将NUM2高位赋给AX
ADD WORD PTR SUM+2, AX ; 将AX加到SUM的高位上
MOV AH, 4CH ; 退出程序
INT 21H
CODE ENDS
END start

BIN
Lab/Lab1/material/2-1.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
Lab/Lab1/material/2-2.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
Lab/Lab1/material/2-3.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

37
Lab/Lab1/material/2.asm Executable file
View File

@@ -0,0 +1,37 @@
DSEG SEGMENT
XXX DW 1234H
YYY DW 5678H
ZZZ DD ?
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG, DS:DSEG
START:
MOV AX, DSEG
MOV DS, AX
MOV AX, XXX ; 将XXX赋给AX
XOR DX, DX ; 异或DX和DX即将DX置0
ADD AX, AX ; AX *= 2, AX = 2 * XXX
ADC DX, 0 ; 把进位保存在DX中
ADD AX, AX ; AX *= 2, AX = 4 * XXX
ADC DX, 0 ; 更新DX中的进位信息
ADD AX, AX ; AX *= 2, AX = 8 * XXX
ADC DX, 0 ; 更新DX中的进位信息
ADD AX, AX ; AX *= 2, AX = 16 * XXX
ADC DX, 0 ; 更新DX中的进位信息
ADD AX, YYY ; AX += YYY, AX = 16 * XXX + YYY
ADC DX, 0 ; 更新DX中的进位信息
MOV WORD PTR ZZZ, AX ; ZZZ的低位 = AX = 16 * XXX + YYY
MOV WORD PTR ZZZ+2, DX ; ZZZ的高位 = DX = 进位数, ZZZ = 16 * XXX + YYY(完整)
MOV AH, 4CH
INT 21H
CSEG ENDS
END START

View File

@@ -0,0 +1,178 @@
![cover](cover.png)
# 一、实验目的
1. 进一步学习汇编语言基本指令使用方法;
2. 学习DEBUG调试工具的基本使用方法掌握debug调试命令a、u、r、d、t、g等
3. 逐条观察程序指令的执行过程,理解指令的功能,理解程序自动、顺序地执行的概念,实践其过程(重点)。
# 二、实验内容
1. 编写、输入一个32位二进制数相加程序逐条执行指令观察指令执行情况。
1. 使用已经过汇编和连接的小程序(t3-2.exe)将其装入内存逐条执行指令观察执行过程和结果。在实验过程中使用E命令修改XXX和YYY单元中的数据再重新计算其结果。
# 三、流程图
第一题:
![graph1.drawio](graph1.drawio.svg)
# 四、实验过程与分析
第一题:
进入调试, -U
![1-1](1-1.png)
-T
![1-2](1-2.png)
载入数据段后:
![1-3](1-3.png)
程序执行完毕后:
![1-4](1-4.png)
第二题:
<img src="2-1.png" alt="2-1" style="zoom:50%;" />
修改后:
<img src="2-2.png" alt="2-2" style="zoom:50%;" />
最终:
<img src="2-3.png" alt="2-3" style="zoom:50%;" />
程序实际效果计算a:b的物理地址。
# 五、实验总结
熟练掌握了各种指令以及调试步骤,收获颇丰。
# 六、思考题
> 程序中的指令、数据是如何在存储器中存储的?
分别在不同的段中按顺序存储
> 如何理解程序执行过程的顺序性?
程序按指令在代码段内存储的顺序执行。如需人为改变执行顺序可以指定ip为要执行的指令的地址。
> 如何理解标志位寄存器中的数据?
标志寄存器在CPU内部用于存储算术逻辑运算后的结果特征和控制CPU的工作方式或工作状态。
| 位数 | 符号 | 含义 |
| :--: | :--: | :--------: |
| 0 | CF | 进位标志 |
| 2 | PF | 奇偶标志 |
| 4 | AF | 半进位标志 |
| 6 | ZF | 零标志 |
| 7 | SF | 符号标志 |
| 8 | TF | 溢出标志 |
| 9 | IF | 方向标志 |
| 10 | DF | 中断标志 |
| 11 | OF | 跟踪标志 |
# 源代码附录
第一题:
```assembly
DATA SEGMENT
NUM1 DD 11451400H ; 被加数
NUM2 DD 19198100H ; 加数
SUM DD ? ; 结果
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
start:
MOV AX, DATA
MOV DS, AX
MOV AX, WORD PTR NUM1 ; 将NUM1低位赋给AX
MOV WORD PTR SUM, AX ; 将AX赋给SUM低位(MOV指令不能直接在两个内存单元间赋值)
MOV AX, WORD PTR NUM2 ; 将NUM2低位赋给AX
ADD WORD PTR SUM, AX ; 将AX加到SUM的低位上
MOV AX, WORD PTR NUM1+2 ; 将NUM1高位赋给AX
ADC WORD PTR SUM+2, AX ; ADC(Add with Carry)将AX加到SUM的高位(初始为零)上再加上CF存着的低位进位
MOV AX, WORD PTR NUM2+2 ; 将NUM2高位赋给AX
ADD WORD PTR SUM+2, AX ; 将AX加到SUM的高位上
MOV AH, 4CH ; 退出程序
INT 21H
CODE ENDS
END start
```
第二题:
```assembly
DSEG SEGMENT
XXX DW 1234H
YYY DW 5678H
ZZZ DD ?
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG, DS:DSEG
START:
MOV AX, DSEG
MOV DS, AX
MOV AX, XXX ; 将XXX赋给AX
XOR DX, DX ; 异或DX和DX即将DX置0
ADD AX, AX ; AX *= 2, AX = 2 * XXX
ADC DX, 0 ; 把进位保存在DX中
ADD AX, AX ; AX *= 2, AX = 4 * XXX
ADC DX, 0 ; 更新DX中的进位信息
ADD AX, AX ; AX *= 2, AX = 8 * XXX
ADC DX, 0 ; 更新DX中的进位信息
ADD AX, AX ; AX *= 2, AX = 16 * XXX
ADC DX, 0 ; 更新DX中的进位信息
ADD AX, YYY ; AX += YYY, AX = 16 * XXX + YYY
ADC DX, 0 ; 更新DX中的进位信息
MOV WORD PTR ZZZ, AX ; ZZZ的低位 = AX = 16 * XXX + YYY
MOV WORD PTR ZZZ+2, DX ; ZZZ的高位 = DX = 进位数, ZZZ = 16 * XXX + YYY(完整)
MOV AH, 4CH
INT 21H
CSEG ENDS
END START
```

Binary file not shown.

BIN
Lab/Lab1/material/cover.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

43
Lab/Lab1/material/graph1.drawio Executable file
View File

@@ -0,0 +1,43 @@
<mxfile host="Electron" modified="2023-04-02T07:41:48.312Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.1.2 Chrome/106.0.5249.199 Electron/21.4.3 Safari/537.36" etag="5hIqR4LNWa8fX__H5m1n" version="21.1.2" type="device">
<diagram name="第 1 页" id="5szQxJ_d8_ub9XAW-9oE">
<mxGraphModel dx="1001" dy="744" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="NDtPPReygzJqEH5N9WcK-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="NDtPPReygzJqEH5N9WcK-1" target="NDtPPReygzJqEH5N9WcK-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="NDtPPReygzJqEH5N9WcK-1" value="载入数据段" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="240" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="NDtPPReygzJqEH5N9WcK-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="NDtPPReygzJqEH5N9WcK-2" target="NDtPPReygzJqEH5N9WcK-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="NDtPPReygzJqEH5N9WcK-2" value="将NUM1和NUM2的低字段内容相加填入SUM的低字段" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="340" y="320" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="NDtPPReygzJqEH5N9WcK-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="NDtPPReygzJqEH5N9WcK-3" target="NDtPPReygzJqEH5N9WcK-4">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="NDtPPReygzJqEH5N9WcK-3" value="将NUM1的高字段内容与上次相加结果的进位相加填入SUM的高字段" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="320.5" y="400" width="199" height="40" as="geometry" />
</mxCell>
<mxCell id="NDtPPReygzJqEH5N9WcK-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="NDtPPReygzJqEH5N9WcK-4" target="NDtPPReygzJqEH5N9WcK-9">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="NDtPPReygzJqEH5N9WcK-4" value="将NUM2的高字段内容与SUM的高字段内容相加填入SUM的高字段" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="320.5" y="480" width="200" height="40" as="geometry" />
</mxCell>
<mxCell id="NDtPPReygzJqEH5N9WcK-9" value="结束程序" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="560" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="NDtPPReygzJqEH5N9WcK-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="NDtPPReygzJqEH5N9WcK-10" target="NDtPPReygzJqEH5N9WcK-1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="NDtPPReygzJqEH5N9WcK-10" value="开始执行程序段" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="160" width="120" height="40" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,55 @@
DATA SEGMENT
CHAR DB 'A'
HINT1 DB 'Please enter a string: $'
HINT2 DB 10, 27H, 'A', 27H, ' occured time: $'
TIMES DB 0
MAXLEN DB 100
LEN DB 0
TABLE DB 100 DUP (0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV AH, 9
MOV DX, OFFSET HINT1
INT 21H
LEA DX, MAXLEN
MOV AH, 0AH
INT 21H
CALL CNT
MOV AH, 9
MOV DX, OFFSET HINT2
INT 21H
MOV AL, TIMES
ADD AL, '0'
MOV DL, AL
MOV AH, 02
INT 21H
MOV AH,4CH
INT 21H
CNT PROC NEAR
MOV CX, 0
MOV CL, LEN
MOV SI, -1
MOV AL, CHAR
LP:
INC SI
CMP AL, TABLE[SI]
JNZ BACK
INC TIMES
BACK:
LOOP LP
RET
CNT ENDP
CODE ENDS
END START

View File

@@ -0,0 +1,105 @@
<mxfile host="Electron" modified="2023-04-11T14:21:32.543Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.1.2 Chrome/106.0.5249.199 Electron/21.4.3 Safari/537.36" etag="QNq7u-1bCWMLLsHMlqsS" version="21.1.2" type="device">
<diagram name="第 1 页" id="Hp0mWjxMjnIu5b5PPHpT">
<mxGraphModel dx="1098" dy="820" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="Hisepnijn4ny8SH6L1L8-29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-1" target="Hisepnijn4ny8SH6L1L8-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-1" value="程序开始" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="280" y="320" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-2" target="Hisepnijn4ny8SH6L1L8-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-2" value="载入数据段" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="120" y="400" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-3" target="Hisepnijn4ny8SH6L1L8-4">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-3" value="输出提示信息" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="280" y="400" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-44" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-4" target="Hisepnijn4ny8SH6L1L8-37">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-4" value="读取字符串" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="440" y="400" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-48" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-6" target="Hisepnijn4ny8SH6L1L8-17">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-6" value="将字符串当前位数加1" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="120" y="720" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-11" value="N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-10" target="Hisepnijn4ny8SH6L1L8-6">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-46" value="Y" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-10" target="Hisepnijn4ny8SH6L1L8-37">
<mxGeometry x="-0.8824" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-10" value="循环次数是否用尽?" style="rhombus;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="120" y="640" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-19" value="Y" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-17" target="Hisepnijn4ny8SH6L1L8-20">
<mxGeometry relative="1" as="geometry">
<mxPoint x="440" y="740" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-49" value="N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-17" target="Hisepnijn4ny8SH6L1L8-10">
<mxGeometry x="-0.9167" relative="1" as="geometry">
<Array as="points">
<mxPoint x="340" y="800" />
<mxPoint x="80" y="800" />
<mxPoint x="80" y="660" />
</Array>
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-17" value="字符串的当前位与指定字符比较是否一样" style="rhombus;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="280" y="720" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-50" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-20" target="Hisepnijn4ny8SH6L1L8-10">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="500" y="800" />
<mxPoint x="80" y="800" />
<mxPoint x="80" y="660" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-20" value="结果加1" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="440" y="720" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-25" target="Hisepnijn4ny8SH6L1L8-27">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-25" value="输出答案" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="440" y="480" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-27" value="程序结束" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="440" y="560" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-42" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-28" target="Hisepnijn4ny8SH6L1L8-10">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-28" value="指定循环次数为字符串长度" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="120" y="560" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-45" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-37" target="Hisepnijn4ny8SH6L1L8-28">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-47" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-37" target="Hisepnijn4ny8SH6L1L8-25">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-37" value="调用CNT子程序" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="200" y="480" width="120" height="40" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,105 @@
<mxfile host="Electron" modified="2023-04-11T14:22:21.464Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.1.2 Chrome/106.0.5249.199 Electron/21.4.3 Safari/537.36" etag="kXFsj5GcRiazvZ2mTRHP" version="21.1.2" type="device">
<diagram name="第 1 页" id="Hp0mWjxMjnIu5b5PPHpT">
<mxGraphModel dx="1098" dy="820" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="Hisepnijn4ny8SH6L1L8-29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-1" target="Hisepnijn4ny8SH6L1L8-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-1" value="程序开始" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="280" y="320" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-2" target="Hisepnijn4ny8SH6L1L8-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-2" value="载入数据段" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="120" y="400" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-3" target="Hisepnijn4ny8SH6L1L8-4">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-3" value="输出提示信息" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="280" y="400" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-44" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-4" target="Hisepnijn4ny8SH6L1L8-37">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-4" value="读取字符串" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="440" y="400" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-48" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-6" target="Hisepnijn4ny8SH6L1L8-17">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-6" value="将字符串当前位数加1" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="120" y="720" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-11" value="N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-10" target="Hisepnijn4ny8SH6L1L8-6">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-46" value="Y" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-10" target="Hisepnijn4ny8SH6L1L8-37">
<mxGeometry x="-0.8824" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-10" value="循环次数是否用尽?" style="rhombus;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="120" y="640" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-19" value="Y" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-17" target="Hisepnijn4ny8SH6L1L8-20">
<mxGeometry relative="1" as="geometry">
<mxPoint x="440" y="740" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-49" value="N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-17" target="Hisepnijn4ny8SH6L1L8-10">
<mxGeometry x="-0.9167" relative="1" as="geometry">
<Array as="points">
<mxPoint x="340" y="800" />
<mxPoint x="80" y="800" />
<mxPoint x="80" y="660" />
</Array>
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-17" value="字符串的当前位与指定字符比较是否一样" style="rhombus;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="280" y="720" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-50" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-20" target="Hisepnijn4ny8SH6L1L8-10">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="500" y="800" />
<mxPoint x="80" y="800" />
<mxPoint x="80" y="660" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-20" value="结果加1" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="440" y="720" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-25" target="Hisepnijn4ny8SH6L1L8-27">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-25" value="输出答案" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="480" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-27" value="程序结束" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="560" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-42" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-28" target="Hisepnijn4ny8SH6L1L8-10">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-28" value="指定循环次数为字符串长度" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="120" y="560" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-45" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-37" target="Hisepnijn4ny8SH6L1L8-28">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-47" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-37" target="Hisepnijn4ny8SH6L1L8-25">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-37" value="调用CNT子程序" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="200" y="480" width="120" height="40" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

BIN
Lab/Lab2/material/1.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
Lab/Lab2/material/2.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

View File

@@ -0,0 +1,155 @@
![cover](cover.png)
# 一、实验目的
1. 了解汇编语言子程序的概念。
2. 掌握汇编语言子程序的定义、调用和返回。
3. 掌握设计汇编语言子程序及过程的基本方法。
4. 清楚调用指令CALL及返回指令RET执行时堆栈内容及指针的变化。
5. 掌握子程序和主程序间的参数传递方法。
# 二、实验内容
试编写一个有主程序和子程序结构的程序模块。
主程序要求从键盘接收一串字符并存于字节数组TABLE中显示字符CHAR出现的次数。
子程序在以TABLE为首地址的字节数组中查找CHAR统计出现的次数。
# 三、流程图
![graph](graph.drawio.svg)
# 四、实验过程与分析
![1](1.png)
将源代码放入MASM路径下编译。
没有警告和报错。
![2](2.png)
LINK链接程序。
![3](3.png)
出现提示信息。
![4](4.png)
输入字符串,按下回车。
程序打印出指定字符“**A**”出现的次数。
# 五、实验总结
在本实验中,我了解了汇编语言子程序的概念,掌握了汇编语言子程序的定义、调用和返回,以及设计汇编语言子程序及过程的基本方法。
# 六、思考题
> 子程序和主程序之间的参数传递是通过什么方式实现的?
通常情况下,主、子程序之间传递参数可以通过以下四种方式实现:
1. 寄存器传送参数
2. 存储单元传送参数
3. 堆栈传送参数或参数地址
4. 多模块之间的参数传递
**本实验程序使用寄存器传递参数。**
> 在DEBUG环境下观察执行CALL指令时CS、IP寄存器是否变化。
![5](5.png)
执行CALL指令的时候
- 如果是段内近调用不会改变CS但是IP会改变。本实验程序是这种情况如图所示可见CS不变IP变
- 如果是远调用CS和IP都会改变。
> 在DEBUG环境下观察执行CALL、RET时堆栈的变化。
![6](6.png)
![7](7.png)
由执行CALL前后SP值的变化和对应地址记录的值可知由于是近调用将IP压入栈中记录SP记录了要返回的IP=0017H。
由于DEBUG环境无法输入字符串很难观测RET指令执行时的情况。实际上RET时SP会回退原来CS和IP的值会退栈然后赋值给当前的CS和IP。
# 源代码附录
```assembly
DATA SEGMENT
CHAR DB 'A'
HINT1 DB 'Please enter a string: $'
HINT2 DB 10, 27H, 'A', 27H, ' occured time: $'
TIMES DB 0
MAXLEN DB 100
LEN DB 0
TABLE DB 100 DUP (0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET HINT1 ; 将HINT1的偏移地址赋给DX准备输出
MOV AH, 9 ; 输出
INT 21H
LEA DX, MAXLEN ; 0AH功能会获取DS:[DX](已定义为MAXLEN)作为输入缓冲区最大容量
MOV AH, 0AH ; 调用0AH功能将输入的字符串长度存入DS:[DX+1](已定义为LEN)
INT 21H ; 将字符串存入从DS:DX+2开始的空间(已定义为TABLE)
CALL CNT ; 统计字符“A”的数量结果在TIMES中
MOV DX, OFFSET HINT2 ; 将HINT2的偏移地址赋给DX准备输出
MOV AH, 9 ; 输出
INT 21H
MOV AL, TIMES
ADD AL, '0' ; TIMES += '0' (将数字信息转换成字符)
MOV DL, AL
MOV AH, 02H ; 显示单个字符
INT 21H
MOV AH,4CH
INT 21H
CNT PROC NEAR
MOV CX, 0
MOV CL, LEN
MOV SI, -1 ; SI是遍历TABLE的下标
MOV AL, CHAR ; 要比较的字符移到AL中(CMP不能比较两个内存单元)
LP:
INC SI
CMP AL, TABLE[SI]
JNE BACK ; 不相等则跳过INC TIMES重新循环
INC TIMES
BACK:
LOOP LP ; LOOP先将CX -= 1然后判断是否为0为0就退出循环
RET
CNT ENDP
CODE ENDS
END START
```

Binary file not shown.

BIN
Lab/Lab2/material/3.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

BIN
Lab/Lab2/material/4.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

BIN
Lab/Lab2/material/5.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
Lab/Lab2/material/6.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
Lab/Lab2/material/7.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

56
Lab/Lab2/material/code.asm Executable file
View File

@@ -0,0 +1,56 @@
DATA SEGMENT
CHAR DB 'A'
HINT1 DB 'Please enter a string: $'
HINT2 DB 10, 27H, 'A', 27H, ' occured time: $'
TIMES DB 0
MAXLEN DB 100
LEN DB 0
TABLE DB 100 DUP (0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET HINT1 ; 将HINT1的偏移地址赋给DX准备输出
MOV AH, 9 ; 输出
INT 21H
LEA DX, MAXLEN ; 0AH功能会获取DS:[DX](已定义为MAXLEN)作为输入缓冲区最大容量
MOV AH, 0AH ; 调用0AH功能将输入的字符串长度存入DS:[DX+1](已定义为LEN)
INT 21H ; 将字符串存入从DS:DX+2开始的空间(已定义为TABLE)
CALL CNT ; 统计字符“A”的数量结果在TIMES中
MOV DX, OFFSET HINT2 ; 将HINT2的偏移地址赋给DX准备输出
MOV AH, 9 ; 输出
INT 21H
MOV AL, TIMES
ADD AL, '0' ; TIMES += '0' (将数字信息转换成字符)
MOV DL, AL
MOV AH, 02H ; 显示单个字符
INT 21H
MOV AH,4CH
INT 21H
CNT PROC NEAR
MOV CX, 0
MOV CL, LEN
MOV SI, -1 ; SI是遍历TABLE的下标
MOV AL, CHAR ; 要比较的字符移到AL中(CMP不能比较两个内存单元)
LP:
INC SI
CMP AL, TABLE[SI]
JNE BACK ; 不相等则跳过INC TIMES重新循环
INC TIMES
BACK:
LOOP LP ; LOOP先将CX -= 1然后判断是否为0为0就退出循环
RET
CNT ENDP
CODE ENDS
END START

BIN
Lab/Lab2/material/cover.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

105
Lab/Lab2/material/graph.drawio Executable file
View File

@@ -0,0 +1,105 @@
<mxfile host="Electron" modified="2023-04-11T14:22:18.173Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.1.2 Chrome/106.0.5249.199 Electron/21.4.3 Safari/537.36" etag="ppF0kxKw4kt9IrtH2h0O" version="21.1.2" type="device">
<diagram name="第 1 页" id="Hp0mWjxMjnIu5b5PPHpT">
<mxGraphModel dx="1098" dy="820" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="Hisepnijn4ny8SH6L1L8-29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-1" target="Hisepnijn4ny8SH6L1L8-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-1" value="程序开始" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="280" y="320" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-2" target="Hisepnijn4ny8SH6L1L8-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-2" value="载入数据段" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="120" y="400" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-3" target="Hisepnijn4ny8SH6L1L8-4">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-3" value="输出提示信息" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="280" y="400" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-44" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-4" target="Hisepnijn4ny8SH6L1L8-37">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-4" value="读取字符串" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="440" y="400" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-48" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-6" target="Hisepnijn4ny8SH6L1L8-17">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-6" value="将字符串当前位数加1" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="120" y="720" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-11" value="N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-10" target="Hisepnijn4ny8SH6L1L8-6">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-46" value="Y" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-10" target="Hisepnijn4ny8SH6L1L8-37">
<mxGeometry x="-0.8824" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-10" value="循环次数是否用尽?" style="rhombus;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="120" y="640" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-19" value="Y" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-17" target="Hisepnijn4ny8SH6L1L8-20">
<mxGeometry relative="1" as="geometry">
<mxPoint x="440" y="740" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-49" value="N" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-17" target="Hisepnijn4ny8SH6L1L8-10">
<mxGeometry x="-0.9167" relative="1" as="geometry">
<Array as="points">
<mxPoint x="340" y="800" />
<mxPoint x="80" y="800" />
<mxPoint x="80" y="660" />
</Array>
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-17" value="字符串的当前位与指定字符比较是否一样" style="rhombus;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="280" y="720" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-50" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-20" target="Hisepnijn4ny8SH6L1L8-10">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="500" y="800" />
<mxPoint x="80" y="800" />
<mxPoint x="80" y="660" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-20" value="结果加1" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="440" y="720" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-25" target="Hisepnijn4ny8SH6L1L8-27">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-25" value="输出答案" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="480" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-27" value="程序结束" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="560" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-42" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-28" target="Hisepnijn4ny8SH6L1L8-10">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-28" value="指定循环次数为字符串长度" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="120" y="560" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-45" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-37" target="Hisepnijn4ny8SH6L1L8-28">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-47" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Hisepnijn4ny8SH6L1L8-37" target="Hisepnijn4ny8SH6L1L8-25">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Hisepnijn4ny8SH6L1L8-37" value="调用CNT子程序" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="200" y="480" width="120" height="40" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

BIN
Lab/Lab2/实验2 查找字符.doc Executable file

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,58 @@
<mxfile host="Electron" modified="2023-05-06T14:49:58.247Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.8 Chrome/112.0.5615.165 Electron/24.2.0 Safari/537.36" etag="gX_Ezp9wm0UEAzm5YIdF" version="21.2.8" type="device">
<diagram name="第 1 页" id="3iH2U7M1F-pdt02PPPwc">
<mxGraphModel dx="824" dy="768" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="LjnWuoztt-sNhJGu1yFB-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="LjnWuoztt-sNhJGu1yFB-1" target="LjnWuoztt-sNhJGu1yFB-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-1" value="程序开始" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="160" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="LjnWuoztt-sNhJGu1yFB-2" target="LjnWuoztt-sNhJGu1yFB-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-2" value="向命令口发送命令将PA口置为1方式输入PB口置为0方式输出" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="320" y="240" width="200" height="40" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="LjnWuoztt-sNhJGu1yFB-3" target="LjnWuoztt-sNhJGu1yFB-4">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-3" value="将PB口输出全零灭掉所有LED灯" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="320" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="LjnWuoztt-sNhJGu1yFB-4" target="LjnWuoztt-sNhJGu1yFB-5">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-4" value="通过PA口获取各个开关状态到AL" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="400" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="LjnWuoztt-sNhJGu1yFB-5" target="LjnWuoztt-sNhJGu1yFB-6">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-5" value="向PB口输出AL" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="480" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="LjnWuoztt-sNhJGu1yFB-6" target="LjnWuoztt-sNhJGu1yFB-7">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-6" value="进入延时子程序,延时一小段时间" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="560" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="LjnWuoztt-sNhJGu1yFB-7" target="LjnWuoztt-sNhJGu1yFB-5">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="420" y="700" />
<mxPoint x="320" y="700" />
<mxPoint x="320" y="500" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-7" value="使用ROR指令AL向右移一位" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="640" width="120" height="40" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,58 @@
<mxfile host="Electron" modified="2023-05-06T15:21:41.040Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.8 Chrome/112.0.5615.165 Electron/24.2.0 Safari/537.36" etag="wLXNmcTcuL1nMTwf1z0g" version="21.2.8" type="device">
<diagram name="第 1 页" id="3iH2U7M1F-pdt02PPPwc">
<mxGraphModel dx="841" dy="768" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="LjnWuoztt-sNhJGu1yFB-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="LjnWuoztt-sNhJGu1yFB-1" target="LjnWuoztt-sNhJGu1yFB-2" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-1" value="程序开始" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="360" y="160" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="LjnWuoztt-sNhJGu1yFB-2" target="LjnWuoztt-sNhJGu1yFB-3" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-2" value="向命令口发送命令将PA口置为0方式输入PB口置为0方式输出" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="320" y="240" width="200" height="40" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="LjnWuoztt-sNhJGu1yFB-3" target="LjnWuoztt-sNhJGu1yFB-4" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-3" value="将PB口输出全零灭掉所有LED灯" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="360" y="320" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="LjnWuoztt-sNhJGu1yFB-4" target="LjnWuoztt-sNhJGu1yFB-5" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-4" value="通过PA口获取各个开关状态到AL" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="360" y="400" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="LjnWuoztt-sNhJGu1yFB-5" target="LjnWuoztt-sNhJGu1yFB-6" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-5" value="向PB口输出AL" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="360" y="480" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="LjnWuoztt-sNhJGu1yFB-6" target="LjnWuoztt-sNhJGu1yFB-7" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-6" value="进入延时子程序,延时一小段时间" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="360" y="560" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="LjnWuoztt-sNhJGu1yFB-7" target="LjnWuoztt-sNhJGu1yFB-5" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="420" y="700" />
<mxPoint x="320" y="700" />
<mxPoint x="320" y="500" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-7" value="使用ROR指令AL向右移一位" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="360" y="640" width="120" height="40" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,240 @@
![cover](cover.png)
<h1><center><strong>实验二 利用8255A实现LED的流水点亮实验</strong></center></h1>
### 一、实验目的
该实验的目的在于掌握8255A和微机接口的连接方法了解8255A的基本的工作原理和编程方法。
### 二、实验内容
**任务一:**PA口接8个拨动开关K1-K8PB口接8个LED。初始由开关K1-K8设定8位不同的值当执行程序后LED按K1-K8初始设定的值点亮并向右流动8255A工作在0方式
**任务二:**在数码管上显示“8255-A”。
### 三、流程图
**任务一:**
![task1.drawio](task1.drawio.svg)
**任务二:**
![task2.drawio](task2.drawio.svg)
### 四、实验过程与分析
**任务一:**
首先在实验箱中将接线连好。将8255A芯片的CS连到280H地址。因此命令口为283HPA口为280HPB口为281HPC口为282H。
将PA口连到开关上PB口连到LED灯上。
然后设置好开关。将代码编译后运行。运行效果如视频所示。
**任务二:**
首先在实验箱中将接线连好。将8255A芯片的CS连到280H地址。将PA口连到位码接口上PB口连到段码接口上。
<img src="task2.jpg" alt="task2" style="zoom:25%;" />
将代码编译后运行。运行效果如图所示。
### 五、实验总结
在本实验中我掌握了8255A和微机接口的连接方法了解了8255A的基本的工作原理和编程方法收获颇丰。
### 六、思考题
> 在本实验的硬件电路中能使用C口对LED指示灯控制码如果可以写出2种控制方法编程方法
**控制方法一:**使用命令口直接将PC口置位。
```assembly
MOV DX, 283H ; 设置命令口
MOV AL, 00000101B ; 0|xxx|010(指定PC2引脚)|1(置位)
OUT DX, AL ; 输出
```
**控制方法二:**使用方式0将PC口置为数据输出口。
```assembly
MOV DX, 283H
MOV AL, 10000000B ; 1|00(A组0方式)|0(PA输入)|0(PC4-7输出)|0(B组0方式)|0(PB输出)|0(PC0-3输出)
OUT DX, AL
MOV DX, 282H
MOV AL, 00000001B ; PC1为高电平
OUT DX, AL
```
### 源代码附录
**任务一:**
```assembly
DATA SEGMENT
T DW 0FFH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV DX, 283H ; 命令口
MOV AL, 10010000B ; 1|00(A组0方式)|1(PA输入)|0(PC4-7输出)|0(B组0方式)|0(PB输出)|0(PC0-3输出)
OUT DX, AL
MOV DX, 281H ; B口
MOV AL, 00H ; LED全置0
OUT DX, AL
MOV DX, 280H ; A口
IN AL, DX ; 读入到AL
MOV DX, 281H ; B口
LP:
OUT DX, AL ; 从B口输出AL
CALL DELAY ; 延时
ROR AL, 1 ; ROR(Rotate Right)把AL向右移1位移出的位补到左边实现走马灯
JMP LP ; 无限循环
DELAY PROC
PUSH BX
PUSH AX
MOV BX, T
MOV AX, T
DL1:
DL2:
DEC BX
JNZ DL1
DEC AX
JNZ DL2
POP AX
POP BX
RET
DELAY ENDP
CODE ENDS
END START
```
**任务二:**
```assembly
DATA SEGMENT
EIGHT DB 7FH
TWO DB 5BH
FIVE DB 6DH
BAR DB 40H
A DB 77H
T DW 0FFH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV DX, 283H ; 命令口
MOV AL, 10000000B ; 1|00(A组0方式)|0(PA输出)|0(PC4-7输出)|0(B组0方式)|0(PB输出)|0(PC0-3输出)
OUT DX, AL
LP:
MOV DX, 280H ; A口控制位码
MOV AL, 10000000B ; 第1位PA1置1
OUT DX, AL
MOV DX, 281H ; B口控制段码
MOV AL, EIGHT ; 输出数据段定义的字符“8”
OUT DX, AL
CALL DELAY ; 延时后清零
MOV DX, 280H
MOV AL, 01000000B ; 第2位PA2置1
OUT DX, AL
MOV DX, 281H
MOV AL, TWO ; 输出数据段定义的字符“2”
OUT DX, AL
CALL DELAY
MOV DX, 280H
MOV AL, 00100000B ; 第3位PA3置1
OUT DX, AL
MOV DX, 281H
MOV AL, FIVE ; 输出数据段定义的字符“5”
OUT DX, AL
CALL DELAY
MOV DX, 280H
MOV AL, 00010000B ; 第4位PA4置1
OUT DX, AL
MOV DX, 281H
MOV AL, FIVE ; 输出数据段定义的字符“5”
OUT DX, AL
CALL DELAY
MOV DX, 280H
MOV AL, 00001000B ; 第5位PA5置1
OUT DX, AL
MOV DX, 281H
MOV AL, BAR ; 输出数据段定义的字符“-”
OUT DX, AL
CALL DELAY
MOV DX, 280H
MOV AL, 00000100B ; 第6位PA6置1
OUT DX, AL
MOV DX, 281H
MOV AL, A ; 输出数据段定义的字符“A”
OUT DX, AL
CALL DELAY
JMP LP ; 无限循环
DELAY PROC
PUSH BX
MOV BX, T
DL1:
DEC BX
JNZ DL1
POP BX
; 将位码段码都置0否则前一位显示的字符会在显示下一位字符显示前在该位上显示
MOV DX, 280H
MOV AL, 00000000B
OUT DX, AL
MOV DX, 281H
MOV AL, 0
OUT DX, AL
RET
DELAY ENDP
CODE ENDS
END START
```

BIN
Lab/Lab3/material/cover.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

58
Lab/Lab3/material/task1.drawio Executable file
View File

@@ -0,0 +1,58 @@
<mxfile host="Electron" modified="2023-05-06T15:21:40.345Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.8 Chrome/112.0.5615.165 Electron/24.2.0 Safari/537.36" etag="wTuHmDiwrehiRT4wOHhQ" version="21.2.8" type="device">
<diagram name="第 1 页" id="3iH2U7M1F-pdt02PPPwc">
<mxGraphModel dx="841" dy="768" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="LjnWuoztt-sNhJGu1yFB-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="LjnWuoztt-sNhJGu1yFB-1" target="LjnWuoztt-sNhJGu1yFB-2" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-1" value="程序开始" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="360" y="160" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="LjnWuoztt-sNhJGu1yFB-2" target="LjnWuoztt-sNhJGu1yFB-3" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-2" value="向命令口发送命令将PA口置为0方式输入PB口置为0方式输出" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="320" y="240" width="200" height="40" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="LjnWuoztt-sNhJGu1yFB-3" target="LjnWuoztt-sNhJGu1yFB-4" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-3" value="将PB口输出全零灭掉所有LED灯" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="360" y="320" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="LjnWuoztt-sNhJGu1yFB-4" target="LjnWuoztt-sNhJGu1yFB-5" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-4" value="通过PA口获取各个开关状态到AL" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="360" y="400" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="LjnWuoztt-sNhJGu1yFB-5" target="LjnWuoztt-sNhJGu1yFB-6" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-5" value="向PB口输出AL" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="360" y="480" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="LjnWuoztt-sNhJGu1yFB-6" target="LjnWuoztt-sNhJGu1yFB-7" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-6" value="进入延时子程序,延时一小段时间" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="360" y="560" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="LjnWuoztt-sNhJGu1yFB-7" target="LjnWuoztt-sNhJGu1yFB-5" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="420" y="700" />
<mxPoint x="320" y="700" />
<mxPoint x="320" y="500" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="LjnWuoztt-sNhJGu1yFB-7" value="使用ROR指令AL向右移一位" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="360" y="640" width="120" height="40" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

BIN
Lab/Lab3/material/task1.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 MiB

BIN
Lab/Lab3/material/task1/code.EXE Executable file

Binary file not shown.

View File

@@ -0,0 +1,80 @@
Turbo Assembler Version 5.3 05-06-23 19:07:51 Page 1
code.asm
1 0000 DATA SEGMENT
2 0000 00FF T DW 0FFH
3 0002 DATA ENDS
4
5 0000 CODE SEGMENT
6 ASSUME CS:CODE,DS:DATA
7
8 0000 START:
9 0000 B8 0000s MOV AX,DATA
10 0003 8E D8 MOV DS,AX
11
12 0005 BA 0283 MOV DX, 283H
13 0008 B0 B1 MOV AL, 0B1H
14 000A EE OUT DX, AL
15
16 000B BA 0281 MOV DX, 281H
17 000E B0 00 MOV AL, 00H
18 0010 EE OUT DX, AL
19
20 0011 BA 0280 MOV DX, 280H
21 0014 EC IN AL, DX
22
23 0015 BA 0281 MOV DX, 281H
24 0018 LP:
25 0018 EE OUT DX, AL
26 0019 E8 0004 CALL DELAY
27 001C D0 C8 ROR AL, 1
28 001E EB F8 JMP LP
29
30 0020 DELAY PROC
31 0020 53 PUSH BX
32 0021 50 PUSH AX
33 0022 8B 1E 0000r MOV BX, T
34 0026 A1 0000r MOV AX, T
35 0029 DL1:
36 0029 DL2:
37 0029 4B DEC BX
38 002A 75 FD JNZ DL1
39 002C 48 DEC AX
40 002D 75 FA JNZ DL2
41 002F 58 POP AX
42 0030 5B POP BX
43 0031 C3 RET
44 0032 DELAY ENDP
45
46 0032 CODE ENDS
47 END START
Turbo Assembler Version 5.3 05-06-23 19:07:51 Page 2
Symbol Table
Symbol Name Type Value
??DATE Text "05-06-23"
??FILENAME Text "code "
??TIME Text "19:07:51"
??VERSION Number 0503
@CPU Text 0101H
@CURSEG Text CODE
@FILENAME Text CODE
@WORDSIZE Text 2
DELAY Near16 CODE:0020
DL1 Near16 CODE:0029
DL2 Near16 CODE:0029
LP Near16 CODE:0018
START Near16 CODE:0000
T Word DATA:0000
Groups & Segments Bit Size Align Combine Class
CODE 16 0032 Para none
DATA 16 0002 Para none

View File

@@ -0,0 +1,7 @@
LINK : warning L4021: no stack segment
Start Stop Length Name Class
00000H 00001H 00002H DATA
00010H 00041H 00032H CODE
Program entry point at 0001:0000

BIN
Lab/Lab3/material/task1/code.OBJ Executable file

Binary file not shown.

View File

@@ -0,0 +1,47 @@
DATA SEGMENT
T DW 0FFH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV DX, 283H ; 命令口
MOV AL, 10010000B ; 1|00(A组0方式)|1(PA输入)|0(PC4-7输出)|0(B组0方式)|0(PB输出)|0(PC0-3输出)
OUT DX, AL
MOV DX, 281H ; B口
MOV AL, 00H ; LED全置0
OUT DX, AL
MOV DX, 280H ; A口
IN AL, DX ; 读入到AL
MOV DX, 281H ; B口
LP:
OUT DX, AL ; 从B口输出AL
CALL DELAY ; 延时
ROR AL, 1 ; ROR(Rotate Right)把AL向右移1位移出的位补到左边实现走马灯
JMP LP ; 无限循环
DELAY PROC
PUSH BX
PUSH AX
MOV BX, T
MOV AX, T
DL1:
DL2:
DEC BX
JNZ DL1
DEC AX
JNZ DL2
POP AX
POP BX
RET
DELAY ENDP
CODE ENDS
END START

94
Lab/Lab3/material/task2.drawio Executable file
View File

@@ -0,0 +1,94 @@
<mxfile host="Electron" modified="2023-05-06T15:06:22.200Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.8 Chrome/112.0.5615.165 Electron/24.2.0 Safari/537.36" etag="KfPBfSVlkAzQTw9RaeJu" version="21.2.8" type="device">
<diagram name="第 1 页" id="Gbocf1ZR2_vZdg_gzSWu">
<mxGraphModel dx="841" dy="768" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="araScAr63CeZQoxgV5Wy-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="araScAr63CeZQoxgV5Wy-1" target="araScAr63CeZQoxgV5Wy-2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-1" value="程序开始" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="80" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="araScAr63CeZQoxgV5Wy-2" target="araScAr63CeZQoxgV5Wy-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-2" value="向命令口发送命令将PA口和PB口全部置为0方式输出" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="320" y="160" width="200" height="40" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="araScAr63CeZQoxgV5Wy-3" target="araScAr63CeZQoxgV5Wy-4">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-3" value="从PA口输出位码10000000B控制数码管第1位显示字符" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="320" y="240" width="200" height="40" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="araScAr63CeZQoxgV5Wy-4" target="araScAr63CeZQoxgV5Wy-9">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-4" value="从PB口输出段码控制数码管显示字符“8”" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="320" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="araScAr63CeZQoxgV5Wy-9" target="araScAr63CeZQoxgV5Wy-10">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-9" value="进入延时子程序" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="400" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="araScAr63CeZQoxgV5Wy-10" target="araScAr63CeZQoxgV5Wy-22">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-10" value="循环延时" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="600" y="400" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="araScAr63CeZQoxgV5Wy-22" target="araScAr63CeZQoxgV5Wy-23">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-22" value="从PA口输出将位码置0控制数码管不显示" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="560" y="480" width="200" height="40" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0.75;entryDx=0;entryDy=0;" edge="1" parent="1" source="araScAr63CeZQoxgV5Wy-23" target="araScAr63CeZQoxgV5Wy-9">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="660" y="620" />
<mxPoint x="540" y="620" />
<mxPoint x="540" y="430" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-23" value="从PB口输出将段码置0控制数码管不显示字符" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="560" y="560" width="200" height="40" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-26" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="araScAr63CeZQoxgV5Wy-28" target="araScAr63CeZQoxgV5Wy-9">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="240" y="540" as="sourcePoint" />
<mxPoint x="290" y="490" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="araScAr63CeZQoxgV5Wy-28" target="araScAr63CeZQoxgV5Wy-29">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-28" value="从PA口输出位码00000100B控制数码管第6位显示字符" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="320" y="560" width="200" height="40" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="araScAr63CeZQoxgV5Wy-29" target="araScAr63CeZQoxgV5Wy-32">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-29" value="从PB口输出段码控制数码管显示字符“A”" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="640" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="araScAr63CeZQoxgV5Wy-32" target="araScAr63CeZQoxgV5Wy-3">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="420" y="800" />
<mxPoint x="280" y="800" />
<mxPoint x="280" y="260" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="araScAr63CeZQoxgV5Wy-32" value="进入延时子程序" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="720" width="120" height="40" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 17 KiB

BIN
Lab/Lab3/material/task2.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

BIN
Lab/Lab3/material/task2/code.EXE Executable file

Binary file not shown.

134
Lab/Lab3/material/task2/code.LST Executable file
View File

@@ -0,0 +1,134 @@
Turbo Assembler Version 5.3 05-06-23 19:11:34 Page 1
code.asm
1 0000 DATA SEGMENT
2 0000 7F EIGHT DB 7FH
3 0001 5B TWO DB 5BH
4 0002 6D FIVE DB 6DH
5 0003 40 BAR DB 40H
6 0004 77 A DB 77H
7 0005 00FF T DW 0FFH
8 0007 DATA ENDS
9
10 0000 CODE SEGMENT
11 ASSUME CS:CODE, DS:DATA
12
13 0000 START:
14 0000 B8 0000s MOV AX, DATA
15 0003 8E D8 MOV DS, AX
16
17 0005 BA 0283 MOV DX, 283H
18 0008 B0 80 MOV AL, 10000000B
19 000A EE OUT DX, AL
20
21
22 000B LP:
23 000B BA 0280 MOV DX, 280H
24 000E B0 80 MOV AL, 10000000B
25 0010 EE OUT DX, AL
26 0011 BA 0281 MOV DX, 281H
27 0014 A0 0000r MOV AL, EIGHT
28 0017 EE OUT DX, AL
29 0018 E8 0051 CALL DELAY
30
31 001B BA 0280 MOV DX, 280H
32 001E B0 40 MOV AL, 01000000B
33 0020 EE OUT DX, AL
34 0021 BA 0281 MOV DX, 281H
35 0024 A0 0001r MOV AL, TWO
36 0027 EE OUT DX, AL
37 0028 E8 0041 CALL DELAY
38
39 002B BA 0280 MOV DX, 280H
40 002E B0 20 MOV AL, 00100000B
41 0030 EE OUT DX, AL
42 0031 BA 0281 MOV DX, 281H
43 0034 B0 6D MOV AL, 6DH
44 0036 EE OUT DX, AL
45 0037 E8 0032 CALL DELAY
46
47 003A BA 0280 MOV DX, 280H
48 003D B0 10 MOV AL, 00010000B
49 003F EE OUT DX, AL
50 0040 BA 0281 MOV DX, 281H
51 0043 A0 0002r MOV AL, FIVE
52 0046 EE OUT DX, AL
53 0047 E8 0022 CALL DELAY
54
55 004A BA 0280 MOV DX, 280H
56 004D B0 08 MOV AL, 00001000B
57 004F EE OUT DX, AL
Turbo Assembler Version 5.3 05-06-23 19:11:34 Page 2
code.asm
58 0050 BA 0281 MOV DX, 281H
59 0053 A0 0003r MOV AL, BAR
60 0056 EE OUT DX, AL
61 0057 E8 0012 CALL DELAY
62
63 005A BA 0280 MOV DX, 280H
64 005D B0 04 MOV AL, 00000100B
65 005F EE OUT DX, AL
66 0060 BA 0281 MOV DX, 281H
67 0063 A0 0004r MOV AL, A
68 0066 EE OUT DX, AL
69 0067 E8 0002 CALL DELAY
70
71 006A EB 9F JMP LP
72
73 006C DELAY PROC
74 006C 53 PUSH BX
75 006D 8B 1E 0005r MOV BX, T
76 0071 DL1:
77 0071 4B DEC BX
78 0072 75 FD JNZ DL1
79 0074 5B POP BX
80
81 0075 BA 0280 MOV DX, 280H
82 0078 B0 00 MOV AL, 00000000B
83 007A EE OUT DX, AL
84 007B BA 0281 MOV DX, 281H
85 007E B0 00 MOV AL, 0
86 0080 EE OUT DX, AL
87
88 0081 C3 RET
89 0082 DELAY ENDP
90
91 0082 CODE ENDS
92 END START
Turbo Assembler Version 5.3 05-06-23 19:11:34 Page 3
Symbol Table
Symbol Name Type Value
??DATE Text "05-06-23"
??FILENAME Text "code "
??TIME Text "19:11:34"
??VERSION Number 0503
@CPU Text 0101H
@CURSEG Text CODE
@FILENAME Text CODE
@WORDSIZE Text 2
A Byte DATA:0004
BAR Byte DATA:0003
DELAY Near16 CODE:006C
DL1 Near16 CODE:0071
EIGHT Byte DATA:0000
FIVE Byte DATA:0002
LP Near16 CODE:000B
START Near16 CODE:0000
T Word DATA:0005
TWO Byte DATA:0001
Groups & Segments Bit Size Align Combine Class
CODE 16 0082 Para none
DATA 16 0007 Para none

View File

@@ -0,0 +1,7 @@
LINK : warning L4021: no stack segment
Start Stop Length Name Class
00000H 00006H 00007H DATA
00010H 00091H 00082H CODE
Program entry point at 0001:0000

BIN
Lab/Lab3/material/task2/code.OBJ Executable file

Binary file not shown.

View File

@@ -0,0 +1,92 @@
DATA SEGMENT
EIGHT DB 7FH
TWO DB 5BH
FIVE DB 6DH
BAR DB 40H
A DB 77H
T DW 0FFH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV DX, 283H ; 命令口
MOV AL, 10000000B ; 1|00(A组0方式)|0(PA输出)|0(PC4-7输出)|0(B组0方式)|0(PB输出)|0(PC0-3输出)
OUT DX, AL
LP:
MOV DX, 280H ; A口控制位码
MOV AL, 10000000B ; 第1位PA1置1
OUT DX, AL
MOV DX, 281H ; B口控制段码
MOV AL, EIGHT ; 输出数据段定义的字符“8”
OUT DX, AL
CALL DELAY ; 延时后清零
MOV DX, 280H
MOV AL, 01000000B ; 第2位PA2置1
OUT DX, AL
MOV DX, 281H
MOV AL, TWO ; 输出数据段定义的字符“2”
OUT DX, AL
CALL DELAY
MOV DX, 280H
MOV AL, 00100000B ; 第3位PA3置1
OUT DX, AL
MOV DX, 281H
MOV AL, FIVE ; 输出数据段定义的字符“5”
OUT DX, AL
CALL DELAY
MOV DX, 280H
MOV AL, 00010000B ; 第4位PA4置1
OUT DX, AL
MOV DX, 281H
MOV AL, FIVE ; 输出数据段定义的字符“5”
OUT DX, AL
CALL DELAY
MOV DX, 280H
MOV AL, 00001000B ; 第5位PA5置1
OUT DX, AL
MOV DX, 281H
MOV AL, BAR ; 输出数据段定义的字符“-”
OUT DX, AL
CALL DELAY
MOV DX, 280H
MOV AL, 00000100B ; 第6位PA6置1
OUT DX, AL
MOV DX, 281H
MOV AL, A ; 输出数据段定义的字符“A”
OUT DX, AL
CALL DELAY
JMP LP ; 无限循环
DELAY PROC
PUSH BX
MOV BX, T
DL1:
DEC BX
JNZ DL1
POP BX
; 将位码段码都置0否则前一位显示的字符会在显示下一位字符显示前在该位上显示
MOV DX, 280H
MOV AL, 00000000B
OUT DX, AL
MOV DX, 281H
MOV AL, 0
OUT DX, AL
RET
DELAY ENDP
CODE ENDS
END START

Binary file not shown.

BIN
Lab/Lab3/实验箱安装.doc Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Lab/Lab4/material/1-1.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
Lab/Lab4/material/1-2.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,437 @@
![cover](cover.png)
<h1><center><strong>实验四 8254A不同工作方式的实验</strong></center></h1>
### 一、实验目的
更深刻的理解8254A定时/计数器的各种工作方式的特点;通过观察实验波形,可直观地了解这几种工作方式的异同。
### 二、实验内容
**任务一:**编写程序分别显示2、3工作方式下的波形。要求2方式的输出频率为1000Hz3方式的输出频率为2000Hz。本实验使用8253A的定时/计数器0GATE0通过K1接到+5V或地CLK0接1MHZ的时钟脉冲OUT2接示波器观测输出波形连接线见图1-1示
**任务二:**采用定时器0和定时器1的级联方式要求定时器0采用2方式定时器1采用3方式观测定时器0和定时器1输出波形时间常数自定连接线见图1-2示
![1-1](1-1.png)
![1-2](1-2.png)
### 三、流程图
**任务一:**
![task1.drawio](task1.drawio.svg)
**任务二:**
![task3.drawio](task3.drawio.svg)
### 四、实验过程与分析
**任务一:**
8254A芯片的2方式是频率发生器在每一个计数周期的最后输出长度为一个时钟周期的低脉冲其余时间维持高脉冲。输出目标频率为1kHz时钟周期为1MHz则计数初值为$(1,000,000)_D \div (1,000)_D = (1,000)_D = (0011,1110,1000)_B$。首先在283H口输入方式命令。使用定时器0计数初值长度为2个字节使用2方式使用二进制输入计数初值所以输入的命令字为$(0011,0100)_B$。随后依次向280H口输入$(0011,1110,1000)_B$的低位字节和高位字节。8254A芯片即可运行。
示波器显示波形如下:
<img src="method2.jpg" alt="method2" style="zoom:25%;" />
8254A芯片的3方式是方波发生器在每一个计数周期中前一半周期输出高脉冲后一半周期输出低脉冲。输出目标频率为2kHz时钟周期为1MHz则计数初值为$(1,000,000)_D \div (2,000)_D = (500)_D = (0001,1111,0100)_B$。首先在283H口输入方式命令。使用定时器0计数初值长度为2个字节使用2方式使用二进制输入计数初值所以输入的命令字为$(0011,0100)_B$。随后依次向280H口输入$(0001,1111,0100)_B$的低位字节和高位字节。8254A芯片即可运行。
示波器显示波形如下:
<img src="method3.jpg" alt="method3" style="zoom: 25%;" />
**任务二:**
按照任务要求级联定时器0和定时器1。首先将OUT0的输出频率设置为1kHzCLK0输入为1MHz则计数初值为$1,000,000 \div 1,000 = (1,000)_D = (0011,1110,1000)_B$。在283H口输入方式命令。使用定时器0计数初值长度为2个字节使用2方式使用二进制输入计数初值所以输入的命令字为$(0011,0110)_B$。随后依次向280H口输入$(0011,1110,1000)_B$的低位字节和高位字节。
再将OUT1的计数初值设置为$(10)_D = (0000,1010)_B$,则输出为$(1,000)_D \div (10)_D = (100)_D{\rm Hz}$的方波。在283H口输入方式命令。使用定时器1计数初值长度为1个字节使用3方式使用二进制输入计数初值所以输入的命令字为$(0101,0110)_B$。随后向280H口输入$(0000,1010)_B$。
### 五、实验总结
通过本实验我对8254A定时/计数器的各种工作方式的特点的理解更加深刻。我学会了如何在实验箱中使用8254定时器学会了如何使用示波器。受益匪浅。
### 六、思考题
> 用示波器观测方式0-5它们所展示的波形如何。
方式2和方式3已经在任务一中观测。下面介绍观测方式0、方式1、方式4、方式5。
**观测方式0**
使用定时器0将CLK0连到1MHz时钟源使用方式3分频使OUT0的频率为1000Hz使用定时器1将CLK1连到频率为1000Hz的OUT0使用方式3分频使OUT1的频率为10Hz。级联降频的原因是初值寄存器的大小不足以容纳$\left(100000 \right)_D$的二进制值。降频至10Hz的原因是示波器只能检测5Hz以上的频率。
使用定时器2将CLK2连到频率为10Hz的OUT1使用0方式。初值设置为$\left(40 \right)_D$,因此**OUT2在第二个时钟下降沿之后输出低电平LED灯灭4秒后OUT2输出高电平LED灯亮**。
使用示波器观察OUT1将LED7连到OUT2观察定时器2的方式0输出。
实物连接图如图所示。
<img src="method0.jpg" alt="method0" style="zoom: 25%;" />
演示视频见附件。
代码如下:
```assembly
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
; 时钟源为1MHz使用0号计数器3方式降频为1kHz计数值为1M / 1k = 1000
MOV DX, 283H ; 命令口
MOV AL, 00110110B ; 00(0号计数器)|11(读写2字节)|011(3方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 280H ; 0号计数器
MOV AL, 11101000B ; 计数值(1000)_D的2进制的低8位
OUT DX, AL
MOV AL, 00000011B ; 计数值(1000)_D的2进制的高8位
OUT DX, AL
; 从0号计数器获得1kHz的方波使用1号计数器3方式降频为10Hz方便示波器和人眼观察计数值为1k / 10 = 100
MOV DX, 283H ; 命令口
MOV AL, 01010110B ; 01(1号计数器)|01(读写低字节高字节置0)|011(3方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 281H ; 1号计数器
MOV AL, 01100100B ; 计数值(100)_D的2进制
OUT DX, AL
; 从1号计数器获得10Hz的方波观察2号计数器0工作方式计数值为4s / 10Hz = 40
MOV DX, 283H ; 命令口
MOV AL, 10010000B ; 10(2号计数器)|01(读写低字节高字节置0)|000(0方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 282H ; 2号计数器
MOV AL, 101000B ; 计数值(40)_D的2进制
OUT DX, AL
CODE ENDS
END START
```
**观测方式1**
使用计时器0和计时器1级联降频为10Hz同观测方式0。
使用定时器2将CLK2连到频率为10Hz的OUT1使用1方式。初值设置为$\left(40 \right)_D$。将GATE2连至单次高脉冲发生器。
**拨动开关KOUT2立刻输出低电平LED灯灭4秒后OUT2输出高电平LED灯亮**
使用示波器观察OUT1将LED7连到OUT2观察定时器2的方式1输出。
实物连接图如图所示。
<img src="method1.jpg" alt="method1" style="zoom: 25%;" />
演示视频见附件。
代码如下:
```assembly
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
; 时钟源为1MHz使用0号计数器3方式降频为1kHz计数值为1M / 1k = 1000
MOV DX, 283H ; 命令口
MOV AL, 00110110B ; 00(0号计数器)|11(读写2字节)|011(3方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 280H ; 0号计数器
MOV AL, 11101000B ; 计数值(1000)_D的2进制的低8位
OUT DX, AL
MOV AL, 00000011B ; 计数值(1000)_D的2进制的高8位
OUT DX, AL
; 从0号计数器获得1kHz的方波使用1号计数器3方式降频为10Hz方便示波器和人眼观察计数值为1k / 10 = 100
MOV DX, 283H ; 命令口
MOV AL, 01010110B ; 01(1号计数器)|01(读写低字节高字节置0)|011(3方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 281H ; 1号计数器
MOV AL, 01100100B ; 计数值(100)_D的2进制
OUT DX, AL
; 从1号计数器获得10Hz的方波观察2号计数器1工作方式计数值为4s / 10Hz = 40
MOV DX, 283H ; 命令口
MOV AL, 10010010B ; 10(2号计数器)|01(读写低字节高字节置0)|001(1方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 282H ; 2号计数器
MOV AL, 101000B ; 计数值(40)_D的2进制
OUT DX, AL
CODE ENDS
END START
```
**观测方式4**
使用计时器0和计时器1级联降频为1Hz同观测方式0。选择频率为1Hz的原因是方式4输出的负脉冲的持续时间为1个时钟周期如果频率太高不易观察。
使用定时器2将CLK2连到频率为1Hz的OUT1使用4方式。初值设置为$\left(4 \right)_D$。
**启动程序4秒后OUT2输出持续1s的低电平LED灯灭1s后LED重新亮**
将GATE2连到单次低脉冲发生器**在启动程序后的4秒内如果输入一个低脉冲倒计时会重新计时**。
使用示波器观察OUT0将LED7连到OUT2观察定时器2的方式4输出。
实物连接图如图所示。
<img src="method4.jpg" alt="method1" style="zoom: 25%;" />
演示视频见附件。
代码如下:
```assembly
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
; 时钟源为1MHz使用0号计数器3方式降频为1kHz计数值为1M / 1k = 1000
MOV DX, 283H ; 命令口
MOV AL, 00110110B ; 00(0号计数器)|11(读写2字节)|011(3方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 280H ; 0号计数器
MOV AL, 11101000B ; 计数值(1000)_D的2进制的低8位
OUT DX, AL
MOV AL, 00000011B ; 计数值(1000)_D的2进制的高8位
OUT DX, AL
; 从0号计数器获得1kHz的方波使用1号计数器3方式降频为1Hz方便人眼观察计数值为1k / 1 = 1000
MOV DX, 283H ; 命令口
MOV AL, 01110110B ; 01(1号计数器)|11(读写2字节)|011(3方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 281H ; 1号计数器
MOV AL, 11101000B ; 计数值(1000)_D的2进制的低8位
OUT DX, AL
MOV AL, 00000011B ; 计数值(1000)_D的2进制的高8位
OUT DX, AL
; 从1号计数器获得1Hz的方波观察2号计数器4工作方式计数值为4s / 1Hz = 4
MOV DX, 283H ; 命令口
MOV AL, 10011000B ; 10(2号计数器)|01(读写低字节高字节置0)|100(4方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 282H ; 2号计数器
MOV AL, 100B ; 计数值(4)_D的2进制
OUT DX, AL
CODE ENDS
END START
```
**观测方式5**
使用计时器0和计时器1级联降频为1Hz同观测方式4。
使用定时器2将CLK2连到频率为1Hz的OUT1使用5方式。初值设置为$\left(4 \right)_D$。将GATE2连至单次高脉冲发生器。
**拨动开关K4秒后OUT2输出持续1s的低电平LED灯灭1s后LED重新亮**
使用示波器观察OUT0将LED7连到OUT2观察定时器2的方式5输出。
实物连接图如图所示。
<img src="method5.jpg" alt="method1" style="zoom: 25%;" />
演示视频见附件。
代码如下:
```assembly
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
; 时钟源为1MHz使用0号计数器3方式降频为1kHz计数值为1M / 1k = 1000
MOV DX, 283H ; 命令口
MOV AL, 00110110B ; 00(0号计数器)|11(读写2字节)|011(3方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 280H ; 0号计数器
MOV AL, 11101000B ; 计数值(1000)_D的2进制的低8位
OUT DX, AL
MOV AL, 00000011B ; 计数值(1000)_D的2进制的高8位
OUT DX, AL
; 从0号计数器获得1kHz的方波使用1号计数器3方式降频为1Hz方便人眼观察计数值为1k / 1 = 1000
MOV DX, 283H ; 命令口
MOV AL, 01110110B ; 01(1号计数器)|11(读写2字节)|011(3方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 281H ; 1号计数器
MOV AL, 11101000B ; 计数值(1000)_D的2进制的低8位
OUT DX, AL
MOV AL, 00000011B ; 计数值(1000)_D的2进制的高8位
OUT DX, AL
; 从1号计数器获得1Hz的方波观察2号计数器5工作方式计数值为4s / 1Hz = 4
MOV DX, 283H ; 命令口
MOV AL, 10011010B ; 10(2号计数器)|01(读写低字节高字节置0)|101(5方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 282H ; 2号计数器
MOV AL, 100B ; 计数值(4)_D的2进制
OUT DX, AL
CODE ENDS
END START
```
### 源代码附录
**任务一:**
方式2
```assembly
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV DX, 283H ; 命令口
MOV AL, 00110100B ; 00(0号计数器)|11(读写2字节)|010(2方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 280H ; 0号计数器
MOV AL, 11101000B ; (1000)_D的2进制的低8位
OUT DX, AL
MOV AL, 00000011B ; (1000)_D的2进制的高8位
OUT DX, AL
CODE ENDS
END START
```
方式3
```assembly
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV DX, 283H ; 命令口
MOV AL, 00110110B ; 00(0号计数器)|11(读写2字节)|011(3方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 280H ; 0号计数器
MOV AL, 11110100B ; (500)_D的2进制的低8位
OUT DX, AL
MOV AL, 00000001B ; (500)_D的2进制的高8位
OUT DX, AL
CODE ENDS
END START
```
**任务二:**
```assembly
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV DX, 283H ; 命令口
MOV AL, 00110100B ; 00(0号计数器)|11(读写2字节)|010(2方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 280H ; 0号计数器
MOV AL, 11101000B ; (1000)_D的2进制的低8位
OUT DX, AL
MOV AL, 00000011B ; (1000)_D的2进制的高8位
OUT DX, AL
MOV DX, 283H ; 命令口
MOV AL, 01010110B ; 01(1号计数器)|01(读写低字节高字节为0)|011(3方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 281H ; 1号计数器
MOV AL, 00001010B ; (10)_D的2进制
OUT DX, AL
CODE ENDS
END START
```

BIN
Lab/Lab4/material/cover.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
Lab/Lab4/material/method0.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

Binary file not shown.

View File

@@ -0,0 +1,71 @@
Turbo Assembler Version 5.3 05-06-23 20:42:50 Page 1
code.asm
1 0000 DATA SEGMENT
2
3 0000 DATA ENDS
4
5 0000 CODE SEGMENT
6 ASSUME CS:CODE, DS:DATA
7
8 0000 START:
9 0000 B8 0000s MOV AX, DATA
10 0003 8E D8 MOV DS, AX
11
12
13 0005 BA 0283 MOV DX, 283H
14 0008 B0 36 MOV AL, 00110110B
15 000A EE OUT DX, AL
16
17 000B BA 0280 MOV DX, 280H
18 000E B0 E8 MOV AL, 11101000B
19 0010 EE OUT DX, AL
20 0011 B0 03 MOV AL, 00000011B
21 0013 EE OUT DX, AL
22
23
24 0014 BA 0283 MOV DX, 283H
25 0017 B0 56 MOV AL, 01010110B
26 0019 EE OUT DX, AL
27
28 001A BA 0281 MOV DX, 281H
29 001D B0 64 MOV AL, 01100100B
30 001F EE OUT DX, AL
31
32
33 0020 BA 0283 MOV DX, 283H
34 0023 B0 90 MOV AL, 10010000B
35 0025 EE OUT DX, AL
36
37 0026 BA 0282 MOV DX, 282H
38 0029 B0 28 MOV AL, 101000B
39 002B EE OUT DX, AL
40
41
42 002C CODE ENDS
43 END START
Turbo Assembler Version 5.3 05-06-23 20:42:50 Page 2
Symbol Table
Symbol Name Type Value
??DATE Text "05-06-23"
??FILENAME Text "code "
??TIME Text "20:42:50"
??VERSION Number 0503
@CPU Text 0101H
@CURSEG Text CODE
@FILENAME Text CODE
@WORDSIZE Text 2
START Near16 CODE:0000
Groups & Segments Bit Size Align Combine Class
CODE 16 002C Para none
DATA 16 0000 Para none

View File

@@ -0,0 +1,7 @@
LINK : warning L4021: no stack segment
Start Stop Length Name Class
00000H 00000H 00000H DATA
00000H 0002BH 0002CH CODE
Program entry point at 0000:0000

Binary file not shown.

View File

@@ -0,0 +1,42 @@
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
; 时钟源为1MHz使用0号计数器3方式降频为1kHz计数值为1M / 1k = 1000
MOV DX, 283H ; 命令口
MOV AL, 00110110B ; 00(0号计数器)|11(读写2字节)|011(3方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 280H ; 0号计数器
MOV AL, 11101000B ; 计数值(1000)_D的2进制的低8位
OUT DX, AL
MOV AL, 00000011B ; 计数值(1000)_D的2进制的高8位
OUT DX, AL
; 从0号计数器获得1kHz的方波使用1号计数器3方式降频为10Hz方便示波器和人眼观察计数值为1k / 10 = 100
MOV DX, 283H ; 命令口
MOV AL, 01010110B ; 01(1号计数器)|01(读写低字节高字节置0)|011(3方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 281H ; 1号计数器
MOV AL, 01100100B ; 计数值(100)_D的2进制
OUT DX, AL
; 从1号计数器获得10Hz的方波观察2号计数器0工作方式计数值为4s / 10Hz = 40
MOV DX, 283H ; 命令口
MOV AL, 10010000B ; 10(2号计数器)|01(读写低字节高字节置0)|000(0方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 282H ; 2号计数器
MOV AL, 101000B ; 计数值(40)_D的2进制
OUT DX, AL
CODE ENDS
END START

BIN
Lab/Lab4/material/method1.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 MiB

Binary file not shown.

View File

@@ -0,0 +1,71 @@
Turbo Assembler Version 5.3 05-06-23 20:50:25 Page 1
code.asm
1 0000 DATA SEGMENT
2
3 0000 DATA ENDS
4
5 0000 CODE SEGMENT
6 ASSUME CS:CODE, DS:DATA
7
8 0000 START:
9 0000 B8 0000s MOV AX, DATA
10 0003 8E D8 MOV DS, AX
11
12
13 0005 BA 0283 MOV DX, 283H
14 0008 B0 36 MOV AL, 00110110B
15 000A EE OUT DX, AL
16
17 000B BA 0280 MOV DX, 280H
18 000E B0 E8 MOV AL, 11101000B
19 0010 EE OUT DX, AL
20 0011 B0 03 MOV AL, 00000011B
21 0013 EE OUT DX, AL
22
23
24 0014 BA 0283 MOV DX, 283H
25 0017 B0 56 MOV AL, 01010110B
26 0019 EE OUT DX, AL
27
28 001A BA 0281 MOV DX, 281H
29 001D B0 64 MOV AL, 01100100B
30 001F EE OUT DX, AL
31
32
33 0020 BA 0283 MOV DX, 283H
34 0023 B0 92 MOV AL, 10010010B
35 0025 EE OUT DX, AL
36
37 0026 BA 0282 MOV DX, 282H
38 0029 B0 28 MOV AL, 101000B
39 002B EE OUT DX, AL
40
41
42 002C CODE ENDS
43 END START
Turbo Assembler Version 5.3 05-06-23 20:50:25 Page 2
Symbol Table
Symbol Name Type Value
??DATE Text "05-06-23"
??FILENAME Text "code "
??TIME Text "20:50:25"
??VERSION Number 0503
@CPU Text 0101H
@CURSEG Text CODE
@FILENAME Text CODE
@WORDSIZE Text 2
START Near16 CODE:0000
Groups & Segments Bit Size Align Combine Class
CODE 16 002C Para none
DATA 16 0000 Para none

View File

@@ -0,0 +1,7 @@
LINK : warning L4021: no stack segment
Start Stop Length Name Class
00000H 00000H 00000H DATA
00000H 0002BH 0002CH CODE
Program entry point at 0000:0000

Binary file not shown.

View File

@@ -0,0 +1,42 @@
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
; 时钟源为1MHz使用0号计数器3方式降频为1kHz计数值为1M / 1k = 1000
MOV DX, 283H ; 命令口
MOV AL, 00110110B ; 00(0号计数器)|11(读写2字节)|011(3方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 280H ; 0号计数器
MOV AL, 11101000B ; 计数值(1000)_D的2进制的低8位
OUT DX, AL
MOV AL, 00000011B ; 计数值(1000)_D的2进制的高8位
OUT DX, AL
; 从0号计数器获得1kHz的方波使用1号计数器3方式降频为10Hz方便示波器和人眼观察计数值为1k / 10 = 100
MOV DX, 283H ; 命令口
MOV AL, 01010110B ; 01(1号计数器)|01(读写低字节高字节置0)|011(3方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 281H ; 1号计数器
MOV AL, 01100100B ; 计数值(100)_D的2进制
OUT DX, AL
; 从1号计数器获得10Hz的方波观察2号计数器1工作方式计数值为4s / 10Hz = 40
MOV DX, 283H ; 命令口
MOV AL, 10010010B ; 10(2号计数器)|01(读写低字节高字节置0)|001(1方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 282H ; 2号计数器
MOV AL, 101000B ; 计数值(40)_D的2进制
OUT DX, AL
CODE ENDS
END START

BIN
Lab/Lab4/material/method2.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 MiB

BIN
Lab/Lab4/material/method3.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

BIN
Lab/Lab4/material/method4.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 MiB

Binary file not shown.

View File

@@ -0,0 +1,73 @@
Turbo Assembler Version 5.3 05-06-23 21:40:00 Page 1
code.asm
1 0000 DATA SEGMENT
2
3 0000 DATA ENDS
4
5 0000 CODE SEGMENT
6 ASSUME CS:CODE, DS:DATA
7
8 0000 START:
9 0000 B8 0000s MOV AX, DATA
10 0003 8E D8 MOV DS, AX
11
12
13 0005 BA 0283 MOV DX, 283H
14 0008 B0 36 MOV AL, 00110110B
15 000A EE OUT DX, AL
16
17 000B BA 0280 MOV DX, 280H
18 000E B0 E8 MOV AL, 11101000B
19 0010 EE OUT DX, AL
20 0011 B0 03 MOV AL, 00000011B
21 0013 EE OUT DX, AL
22
23
24 0014 BA 0283 MOV DX, 283H
25 0017 B0 76 MOV AL, 01110110B
26 0019 EE OUT DX, AL
27
28 001A BA 0281 MOV DX, 281H
29 001D B0 E8 MOV AL, 11101000B
30 001F EE OUT DX, AL
31 0020 B0 03 MOV AL, 00000011B
32 0022 EE OUT DX, AL
33
34
35 0023 BA 0283 MOV DX, 283H
36 0026 B0 98 MOV AL, 10011000B
37 0028 EE OUT DX, AL
38
39 0029 BA 0282 MOV DX, 282H
40 002C B0 04 MOV AL, 100B
41 002E EE OUT DX, AL
42
43
44 002F CODE ENDS
45 END START
Turbo Assembler Version 5.3 05-06-23 21:40:00 Page 2
Symbol Table
Symbol Name Type Value
??DATE Text "05-06-23"
??FILENAME Text "code "
??TIME Text "21:40:00"
??VERSION Number 0503
@CPU Text 0101H
@CURSEG Text CODE
@FILENAME Text CODE
@WORDSIZE Text 2
START Near16 CODE:0000
Groups & Segments Bit Size Align Combine Class
CODE 16 002F Para none
DATA 16 0000 Para none

View File

@@ -0,0 +1,7 @@
LINK : warning L4021: no stack segment
Start Stop Length Name Class
00000H 00000H 00000H DATA
00000H 0002EH 0002FH CODE
Program entry point at 0000:0000

Binary file not shown.

View File

@@ -0,0 +1,44 @@
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
; 时钟源为1MHz使用0号计数器3方式降频为1kHz计数值为1M / 1k = 1000
MOV DX, 283H ; 命令口
MOV AL, 00110110B ; 00(0号计数器)|11(读写2字节)|011(3方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 280H ; 0号计数器
MOV AL, 11101000B ; 计数值(1000)_D的2进制的低8位
OUT DX, AL
MOV AL, 00000011B ; 计数值(1000)_D的2进制的高8位
OUT DX, AL
; 从0号计数器获得1kHz的方波使用1号计数器3方式降频为1Hz方便人眼观察计数值为1k / 1 = 1000
MOV DX, 283H ; 命令口
MOV AL, 01110110B ; 01(1号计数器)|11(读写2字节)|011(3方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 281H ; 1号计数器
MOV AL, 11101000B ; 计数值(1000)_D的2进制的低8位
OUT DX, AL
MOV AL, 00000011B ; 计数值(1000)_D的2进制的高8位
OUT DX, AL
; 从1号计数器获得1Hz的方波观察2号计数器4工作方式计数值为4s / 1Hz = 4
MOV DX, 283H ; 命令口
MOV AL, 10011000B ; 10(2号计数器)|01(读写低字节高字节置0)|100(4方式工作)|0(计数值为2进制)
OUT DX, AL
MOV DX, 282H ; 2号计数器
MOV AL, 100B ; 计数值(4)_D的2进制
OUT DX, AL
CODE ENDS
END START

Some files were not shown because too many files have changed in this diff Show More