问题 3.7
将 10000H~1000FH 这段空间当作栈,初始状态为空,要把 AX、BX、DS 中的数据入栈,应该怎样编写程序指令?
由于栈空间范围是 10000H~1000FH 且初始状态为空,这时 SS:SP 指向的地址为 1000FH + 1 = 10010H(参考“问题 3.6”),设置 SS=1000H,则 SP=0010H。由于 SS 是段寄存器,因此使用下面的指令来实现该设置:
mov ax, 1000H
mov SS, ax
mov SP, 0010H
注意,不能将常量数据直接通过 mov 指令传送给段寄存器,即下面的指令是非法的:
mov SS, 100...
[2023-04-17 11:02] 第3章 问题 3.7
阅读全文 |
评论次数(0) |
浏览次数(96) |
所属类型(问题分析)
[2023-04-17 10:32] 第3章 问题 3.6
问题 3.6
对于一个空栈,SS:SP 将指向一个怎样的位置?
先探讨内存中字型数据的情况。对于字型数据,仿佛存在一个字指针,字指针总是指向字型数据的低 8 位地址单元。本节前面讲过,出入栈操作都是以字为单位进行,可见栈顶元素就是一个字型数据;出入栈的操作对象是 SS:SP 指向的内存单元,可见 SS:SP 就是栈元素字型数据的字指针;因此 SS:SP 指向的正是栈顶元素字型数据的低 8 位地址单元而不是高 8 位地址单元。字型数据的低 8 位地址代表该字型数据的地址,可见表示字型数据的 [address] 与栈顶元素字型数据一一对应,而[address]与寄存器名表示的字型数据一一对...
对于一个空栈,SS:SP 将指向一个怎样的位置?
先探讨内存中字型数据的情况。对于字型数据,仿佛存在一个字指针,字指针总是指向字型数据的低 8 位地址单元。本节前面讲过,出入栈操作都是以字为单位进行,可见栈顶元素就是一个字型数据;出入栈的操作对象是 SS:SP 指向的内存单元,可见 SS:SP 就是栈元素字型数据的字指针;因此 SS:SP 指向的正是栈顶元素字型数据的低 8 位地址单元而不是高 8 位地址单元。字型数据的低 8 位地址代表该字型数据的地址,可见表示字型数据的 [address] 与栈顶元素字型数据一一对应,而[address]与寄存器名表示的字型数据一一对...
阅读全文 |
评论次数(0) |
浏览次数(107) |
所属类型(问题分析)
[2023-04-16 17:21] 第3章 检测点 3.1
检测点 3.1
(一)
在 Debug 实验环境中执行以下操作:
(1) 将题目中要求的数据输入指定的 0000:0000~0000:001f 内存空间
-e 0000:0
0000:0000 00.70 00.80 00.f0 00.30 00.ef 00.60 00.30 00.e2
0000:0008 00. 00.80 00.80 00.12 00.66 00.20 00.22 00.60
0000:0010 00.62 00.26 00.e6 00.d6 00.cc 00.2e 00.3c 00.3b
0000:0018 00.ab 00.ba 00. 0...
(一)
在 Debug 实验环境中执行以下操作:
(1) 将题目中要求的数据输入指定的 0000:0000~0000:001f 内存空间
-e 0000:0
0000:0000 00.70 00.80 00.f0 00.30 00.ef 00.60 00.30 00.e2
0000:0008 00. 00.80 00.80 00.12 00.66 00.20 00.22 00.60
0000:0010 00.62 00.26 00.e6 00.d6 00.cc 00.2e 00.3c 00.3b
0000:0018 00.ab 00.ba 00. 0...
阅读全文 |
评论次数(0) |
浏览次数(86) |
所属类型(汇编作业)
[2023-04-15 19:32] 第3章 问题 3.4
问题 3.4
1. 内存中的情况如下:
地址 数据(十六进制)
10000H 23
10001H 11
10002H 22
10003H 11
2. 执行指令:
mov ax, 1000H
mov ds, ax
mov ax, [0]
mov ax, 11316
mov [0], ax
mov bx, [0]
sub bx, [2]
mov [2], bx
(1) 指令 mov ax, 1000H:将数据 1000H 存储到寄存器 AX 中。
(2) 指令 mov ds, ax:将通用寄存器 AX 存储的数据传送到段寄存器 DS 中。
(3) 指令...
1. 内存中的情况如下:
地址 数据(十六进制)
10000H 23
10001H 11
10002H 22
10003H 11
2. 执行指令:
mov ax, 1000H
mov ds, ax
mov ax, [0]
mov ax, 11316
mov [0], ax
mov bx, [0]
sub bx, [2]
mov [2], bx
(1) 指令 mov ax, 1000H:将数据 1000H 存储到寄存器 AX 中。
(2) 指令 mov ds, ax:将通用寄存器 AX 存储的数据传送到段寄存器 DS 中。
(3) 指令...
阅读全文 |
评论次数(0) |
浏览次数(100) |
所属类型(问题分析)
[2023-04-15 13:14] 第3章 问题 3.3
问题 3.3
1. 内存中的情况如下:
地址 数据(十六进制)
10000H 23
10001H 11
10002H 22
10003H 66
2. 执行指令:
mov ax, 1000H
mov ds, ax
mov ax, [0]
mov bx, [2]
mov cx, [1]
add bx, [1]
add cx, [2]
(1) 指令 mov ax, 1000H:将数据 1000H 存储到寄存器 AX 中。
(2) 指令 mov ds, ax:将通用寄存器 AX 存储的数据传送到段寄存器 DS 中。
(3) 指令 mov ax, [0]:CP...
1. 内存中的情况如下:
地址 数据(十六进制)
10000H 23
10001H 11
10002H 22
10003H 66
2. 执行指令:
mov ax, 1000H
mov ds, ax
mov ax, [0]
mov bx, [2]
mov cx, [1]
add bx, [1]
add cx, [2]
(1) 指令 mov ax, 1000H:将数据 1000H 存储到寄存器 AX 中。
(2) 指令 mov ds, ax:将通用寄存器 AX 存储的数据传送到段寄存器 DS 中。
(3) 指令 mov ax, [0]:CP...
阅读全文 |
评论次数(0) |
浏览次数(91) |
所属类型(问题分析)
[2023-04-15 10:37] 第3章 问题 3.2
问题 3.2(测试)
1. 编写将 al 中的数据送入内存单元 10000H 中的汇编指令
mov ax, 4AE7
mov bx, 1000
mov ds, bx
mov [0], al
2. 在 Debug 中执行上述汇编指令,验证其能否实现本题要求的目标
(以下省略号代表计算机在执行 Debug 命令后的输出内容)
(1) 向内存单元 100000H 前后存储单元中写入无关数据并查看验证
向 0ffffH~10002H 地址的存储空间写数据 01H 23H 45H 67H,存储在 10000H 内存单元的数据是 23H。
-e 0fff:f 01 23 45 ...
1. 编写将 al 中的数据送入内存单元 10000H 中的汇编指令
mov ax, 4AE7
mov bx, 1000
mov ds, bx
mov [0], al
2. 在 Debug 中执行上述汇编指令,验证其能否实现本题要求的目标
(以下省略号代表计算机在执行 Debug 命令后的输出内容)
(1) 向内存单元 100000H 前后存储单元中写入无关数据并查看验证
向 0ffffH~10002H 地址的存储空间写数据 01H 23H 45H 67H,存储在 10000H 内存单元的数据是 23H。
-e 0fff:f 01 23 45 ...
阅读全文 |
评论次数(0) |
浏览次数(94) |
所属类型(问题分析)
[2023-04-15 10:12] 第2章 实验1 查看 CPU 和内存,用机器指令和汇编指令编程
实验1 查看 CPU 和内存,用机器指令和汇编指令编程
一、Debug 命令总结
1. Debug 的 E 和 A 命令用于将数据写入内存,D 和 U 命令用于查看(输出显示)内存所存储的信息,T 命令用于执行 CS:IP 指向的地址所存储的指令,R 命令用于查看(输出显示)和改写 CPU 寄存器所存储的数据。
2. E 和 A 命令的区别:E 命令以机器码或字符(串)形式写入数据,A 命令则以汇编指令的形式写入数据。
3. E 和 A 命令的共同点:
(1) E 和 A 命令都有两种命令格式:
e <起始地址 数据1 数据2 数据 3 ...>
e <起始地址>
a [起...
一、Debug 命令总结
1. Debug 的 E 和 A 命令用于将数据写入内存,D 和 U 命令用于查看(输出显示)内存所存储的信息,T 命令用于执行 CS:IP 指向的地址所存储的指令,R 命令用于查看(输出显示)和改写 CPU 寄存器所存储的数据。
2. E 和 A 命令的区别:E 命令以机器码或字符(串)形式写入数据,A 命令则以汇编指令的形式写入数据。
3. E 和 A 命令的共同点:
(1) E 和 A 命令都有两种命令格式:
e <起始地址 数据1 数据2 数据 3 ...>
e <起始地址>
a [起...
阅读全文 |
评论次数(0) |
浏览次数(74) |
所属类型(课程实验)
[2023-04-15 10:02] 第1章 检测点 1.1
检测点 1.1
(1)
CPU 的寻址能力为 8KB,意味着 CPU 最多可以查找 8K 个存储单元(1 个存储单元的容量为 1B),因为:
8K = 8 * 1K = 2^3 * 2^10 = 2^13
也就是说 CPU 的寻址能力为 2^13 个存储单元,所以其地址总线宽度为 13。
(2)、(3)
因为 1 个存储单元可以存储 1 字节(1 Byte)数据信息,而 1KB 等于 1024 Byte(1024 字节),即 1KB 的存储器可以存储 1024 字节数据,也就是 1024 个存储单元,其存储单元的编号从 0 到 1023。如果一个存储单元包含 8 bit 位,那么 ...
(1)
CPU 的寻址能力为 8KB,意味着 CPU 最多可以查找 8K 个存储单元(1 个存储单元的容量为 1B),因为:
8K = 8 * 1K = 2^3 * 2^10 = 2^13
也就是说 CPU 的寻址能力为 2^13 个存储单元,所以其地址总线宽度为 13。
(2)、(3)
因为 1 个存储单元可以存储 1 字节(1 Byte)数据信息,而 1KB 等于 1024 Byte(1024 字节),即 1KB 的存储器可以存储 1024 字节数据,也就是 1024 个存储单元,其存储单元的编号从 0 到 1023。如果一个存储单元包含 8 bit 位,那么 ...
阅读全文 |
评论次数(0) |
浏览次数(81) |
所属类型(汇编作业)
[2023-04-15 09:54] 第2章 检测点 2.3
检测点 2.3
指令序列如下:
mov ax, bx
sub ax, ax
jmp ax
执行上述 3 条指令后,CPU 共 4 次修改 IP,其中前三次是在每次读取完一条指令后,IP 都自动进行了增值,第 4 次修改则发生在执行最后一条 jmp 指令时 —— jmp 指令将 AX 寄存器所存储的值存入 IP 寄存器,所以最后 IP 中的值与 AX 中的值相同。由于第 2 条指令执行的操作是将 AX 寄存器中的值减去其自身,所得的结果为 0,然后将该结果存入 AX 寄存器,所以 AX 寄存器存储的值为 0,这使得最后的 IP 值也为 0。...
指令序列如下:
mov ax, bx
sub ax, ax
jmp ax
执行上述 3 条指令后,CPU 共 4 次修改 IP,其中前三次是在每次读取完一条指令后,IP 都自动进行了增值,第 4 次修改则发生在执行最后一条 jmp 指令时 —— jmp 指令将 AX 寄存器所存储的值存入 IP 寄存器,所以最后 IP 中的值与 AX 中的值相同。由于第 2 条指令执行的操作是将 AX 寄存器中的值减去其自身,所得的结果为 0,然后将该结果存入 AX 寄存器,所以 AX 寄存器存储的值为 0,这使得最后的 IP 值也为 0。...
阅读全文 |
评论次数(0) |
浏览次数(67) |
所属类型(汇编作业)
[2023-04-15 09:44] 第2章 检测点 2.2
检测点 2.2
(1) 偏移地址使用 16 位总线宽度,其数值范围为0000H~FFFFH;给定段地址 0001H,其基础地址为:
基础地址 = 段地址 x 16 = 00010H
即段地址左移 1 位。而物理地址为:
物理地址 = 基础地址 + 偏移地址 = 00010H + 0000H~FFFFH = 00010H~1000FH
也就是说,CPU 的寻址范围为 00010H 到 1000FH 之间。
(2) 数据存放的存储单元 20000H 既可以是起始地址或终止地址的存储单元,也可以是这两个地址之间的任意一个地址对应的存储单元,该范围由偏移地址来决定;使用 16 位总线宽度的...
(1) 偏移地址使用 16 位总线宽度,其数值范围为0000H~FFFFH;给定段地址 0001H,其基础地址为:
基础地址 = 段地址 x 16 = 00010H
即段地址左移 1 位。而物理地址为:
物理地址 = 基础地址 + 偏移地址 = 00010H + 0000H~FFFFH = 00010H~1000FH
也就是说,CPU 的寻址范围为 00010H 到 1000FH 之间。
(2) 数据存放的存储单元 20000H 既可以是起始地址或终止地址的存储单元,也可以是这两个地址之间的任意一个地址对应的存储单元,该范围由偏移地址来决定;使用 16 位总线宽度的...
阅读全文 |
评论次数(0) |
浏览次数(71) |
所属类型(汇编作业)