first commit
BIN
Lab/Lab1/material/1-1.png
Executable file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
Lab/Lab1/material/1-2.png
Executable file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
Lab/Lab1/material/1-3.png
Executable file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
Lab/Lab1/material/1-4.png
Executable file
|
After Width: | Height: | Size: 8.4 KiB |
23
Lab/Lab1/material/1.asm
Executable 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
|
After Width: | Height: | Size: 74 KiB |
BIN
Lab/Lab1/material/2-2.png
Executable file
|
After Width: | Height: | Size: 84 KiB |
BIN
Lab/Lab1/material/2-3.png
Executable file
|
After Width: | Height: | Size: 40 KiB |
37
Lab/Lab1/material/2.asm
Executable 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
|
||||
BIN
Lab/Lab1/material/21281280_柯劲帆_第1次实验报告.docx
Executable file
178
Lab/Lab1/material/21281280_柯劲帆_第1次实验报告.md
Executable file
@@ -0,0 +1,178 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 一、实验目的
|
||||
|
||||
1. 进一步学习汇编语言基本指令使用方法;
|
||||
2. 学习DEBUG调试工具的基本使用方法;掌握debug调试命令a、u、r、d、t、g等;
|
||||
3. 逐条观察程序指令的执行过程,理解指令的功能,理解程序自动、顺序地执行的概念,实践其过程(重点)。
|
||||
|
||||
# 二、实验内容
|
||||
|
||||
1. 编写、输入一个32位二进制数相加程序,逐条执行指令,观察指令执行情况。
|
||||
1. 使用已经过汇编和连接的小程序(t3-2.exe),将其装入内存,逐条执行指令,观察执行过程和结果。在实验过程中,使用E命令修改XXX和YYY单元中的数据,再重新计算其结果。
|
||||
|
||||
# 三、流程图
|
||||
|
||||
第一题:
|
||||
|
||||

|
||||
|
||||
# 四、实验过程与分析
|
||||
|
||||
第一题:
|
||||
|
||||
进入调试, -U
|
||||
|
||||

|
||||
|
||||
-T
|
||||
|
||||

|
||||
|
||||
载入数据段后:
|
||||
|
||||

|
||||
|
||||
程序执行完毕后:
|
||||
|
||||

|
||||
|
||||
第二题:
|
||||
|
||||
<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
|
||||
|
||||
```
|
||||
|
||||
BIN
Lab/Lab1/material/21281280_柯劲帆_第1次实验报告.pdf
Executable file
BIN
Lab/Lab1/material/cover.png
Executable file
|
After Width: | Height: | Size: 199 KiB |
43
Lab/Lab1/material/graph1.drawio
Executable 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>
|
||||
4
Lab/Lab1/material/graph1.drawio.svg
Executable file
|
After Width: | Height: | Size: 9.8 KiB |