问题 9.1
如何在汇编源程序中使用指令将本源程序某条(些)指令复制到本程序的另一处?方法如下:
1. 取得需要复制的指令所在的内存单元地址,将该地址内存单元所存储的指令信息传送到寄存器中。
mov reg,sreg:[...]
2. 取得目标内存单元的地址,将寄存器存储的内容传送到目标内存单元。
mov sreg:[...],reg
如果指令信息占用的存储空间较大,以致于用一个寄存器不足以全部传送所有指令信息,则可以循环执行上述两个指令,直到将全部指令信息传送完毕为止。
由于不允许在两个内存单元之间传送信息,所以不能将指令信息从某处内存空间直接传送到另一处内存空间的存储...


[2023-06-05 15:58] 第9章 问题 9.1
阅读全文 |
评论次数(0) |
浏览次数(184) |
所属类型(问题分析)
[2023-04-18 17:48] 第3章 问题 3.11、3.12
问题 3.11、3.12
将10000H~1FFFFH地址空间当作栈段,初始状态为空,则SS=1000H时,SP寄存器存储的数据是什么?栈空间的容量有多大?
当初始状态栈设置SS=1000H,则只要既不用手工也不通过指令对SS进行修改,只是任SP随栈指令操作而自然变动,SS是不会因SP的任何改变而发生改变。SP的变化范围是0000H~FFFFH,所以当SP=0000H时,再次执行push将使得SP=SP-2,由于溢出效应,SP变为FFFEH,于是SS:SP由1000:0000变为1000:FFFE;当SP=FFFFH,再次执行pop使得SP=SP+2,溢出效应导致SP由FFFFH变为0...
将10000H~1FFFFH地址空间当作栈段,初始状态为空,则SS=1000H时,SP寄存器存储的数据是什么?栈空间的容量有多大?
当初始状态栈设置SS=1000H,则只要既不用手工也不通过指令对SS进行修改,只是任SP随栈指令操作而自然变动,SS是不会因SP的任何改变而发生改变。SP的变化范围是0000H~FFFFH,所以当SP=0000H时,再次执行push将使得SP=SP-2,由于溢出效应,SP变为FFFEH,于是SS:SP由1000:0000变为1000:FFFE;当SP=FFFFH,再次执行pop使得SP=SP+2,溢出效应导致SP由FFFFH变为0...
阅读全文 |
评论次数(0) |
浏览次数(178) |
所属类型(问题分析)
[2023-04-18 16:17] 第3章 问题 3.10
问题 3.10
在地址10000H处写入字型数据2266H,要求不能使用“mov 内存单元, 寄存器”这类指令,所使用的指令中包含以下两条指令:
mov ax, 2266H
push ax
可以有两种方法:
(1) 将地址为10000H+2内存单元设置为栈顶,即让SS:SP指向1000:0002内存单元(书本使用的方法)
mov ax, 1000H
mov SS, ax
mov SP, 2
最后使用提供的mov和push指令完成将数据2266H写入10000H地址内存单元的操作:
mov ax, 2266H
push ax
(2) 设置DS=1000H,使用默认S...
在地址10000H处写入字型数据2266H,要求不能使用“mov 内存单元, 寄存器”这类指令,所使用的指令中包含以下两条指令:
mov ax, 2266H
push ax
可以有两种方法:
(1) 将地址为10000H+2内存单元设置为栈顶,即让SS:SP指向1000:0002内存单元(书本使用的方法)
mov ax, 1000H
mov SS, ax
mov SP, 2
最后使用提供的mov和push指令完成将数据2266H写入10000H地址内存单元的操作:
mov ax, 2266H
push ax
(2) 设置DS=1000H,使用默认S...
阅读全文 |
评论次数(0) |
浏览次数(425) |
所属类型(问题分析)
[2023-04-17 11:33] 第3章 问题 3.9
问题 3.9
(1) 将 10000H~1000FH 这段空间当作钱,初始状态栈为空
(2) 设置 AX=001AH,BX=001BH
上述两项的指令参考“问题 3.8”。
(3) 利用栈实现交换 AX 和 BX 中的数据
push ax
push bx
pop ax
pop bx
注意指令的顺序。也可以:
push bx
push ax
pop bx
pop ax...
(1) 将 10000H~1000FH 这段空间当作钱,初始状态栈为空
(2) 设置 AX=001AH,BX=001BH
上述两项的指令参考“问题 3.8”。
(3) 利用栈实现交换 AX 和 BX 中的数据
push ax
push bx
pop ax
pop bx
注意指令的顺序。也可以:
push bx
push ax
pop bx
pop ax...
阅读全文 |
评论次数(0) |
浏览次数(219) |
所属类型(问题分析)
[2023-04-17 11:23] 第3章 问题 3.8
问题 3.8
(1) 将 10000H~1000FH 这段空间当作栈,初始状态栈为空
参考“问题 3.7”:
mov cx, 1000H
mov SS, cx
mov SP, 0010H
(2) 设置 AX=001AH,BX=001BH
mov ax, 001AH
mov bx, 001BH
(3) 将 AX、BX 中的数据入栈
push ax
push bx
(4) 将 AX、BX 清零
sub ax, ax
mov bx, ax
(5) 从栈中恢复 AX、BX 原来的内容
pop bx
pop ax
注意,栈空间中出、入栈遵循的规则是“后进先出”...
(1) 将 10000H~1000FH 这段空间当作栈,初始状态栈为空
参考“问题 3.7”:
mov cx, 1000H
mov SS, cx
mov SP, 0010H
(2) 设置 AX=001AH,BX=001BH
mov ax, 001AH
mov bx, 001BH
(3) 将 AX、BX 中的数据入栈
push ax
push bx
(4) 将 AX、BX 清零
sub ax, ax
mov bx, ax
(5) 从栈中恢复 AX、BX 原来的内容
pop bx
pop ax
注意,栈空间中出、入栈遵循的规则是“后进先出”...
阅读全文 |
评论次数(0) |
浏览次数(215) |
所属类型(问题分析)
[2023-04-17 11:02] 第3章 问题 3.7
问题 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...
将 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...
阅读全文 |
评论次数(0) |
浏览次数(136) |
所属类型(问题分析)
[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) |
浏览次数(144) |
所属类型(问题分析)
[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) |
浏览次数(143) |
所属类型(问题分析)
[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) |
浏览次数(129) |
所属类型(问题分析)
[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) |
浏览次数(142) |
所属类型(问题分析)