问题 9.1
如何在汇编源程序中使用指令将本源程序某条(些)指令复制到本程序的另一处?方法如下:
1. 取得需要复制的指令所在的内存单元地址,将该地址内存单元所存储的指令信息传送到寄存器中。
mov reg,sreg:[...]
2. 取得目标内存单元的地址,将寄存器存储的内容传送到目标内存单元。
mov sreg:[...],reg
如果指令信息占用的存储空间较大,以致于用一个寄存器不足以全部传送所有指令信息,则可以循环执行上述两个指令,直到将全部指令信息传送完毕为止。
由于不允许在两个内存单元之间传送信息,所以不能将指令信息从某处内存空间直接传送到另一处内存空间的存储...
[2023-06-05 15:58] 第9章 问题 9.1
阅读全文 |
评论次数(0) |
浏览次数(116) |
所属类型(问题分析)
[2023-06-04 12:42] 第8章 实验7 寻址方式在结构化数据访问中的应用
实验 7 寻址方式在结构化数据访问中的应用
本实验的编程代码如下:
方法 1:不使用栈操作
assume cs:code
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
; 以上是表示 21 年的 21 个字符串,每个字符串包含 4 个字符,所以共计 84 个字符...
本实验的编程代码如下:
方法 1:不使用栈操作
assume cs:code
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
; 以上是表示 21 年的 21 个字符串,每个字符串包含 4 个字符,所以共计 84 个字符...
阅读全文 |
评论次数(0) |
浏览次数(109) |
所属类型(课程实验)
[2023-05-19 22:51] DOSBox-X 学习笔记
/* Note_book_DOSBox-X.txt */
/* DOSBox-X 维基在线 */
Introduction
DOSBox-X 是基于 DOSBox(https://www.dosbox.com)的跨平台 DOS 模拟器。与 DOSBox 一样,它模拟运行许多 MS-DOS 游戏和应用程序所需的 PC,这些游戏和应用程序根本无法在现代 PC 和操作系统上运行。虽然 DOSBox 主要是运行 DOS 游戏,但 DOSBox-X 远不止此。作为 DOSBox 项目的一个分支,它保留适合 DOS 游戏的广泛基础和兼容 DOSBox 的 DOS 游戏设计;并且还是...
/* DOSBox-X 维基在线 */
Introduction
DOSBox-X 是基于 DOSBox(https://www.dosbox.com)的跨平台 DOS 模拟器。与 DOSBox 一样,它模拟运行许多 MS-DOS 游戏和应用程序所需的 PC,这些游戏和应用程序根本无法在现代 PC 和操作系统上运行。虽然 DOSBox 主要是运行 DOS 游戏,但 DOSBox-X 远不止此。作为 DOSBox 项目的一个分支,它保留适合 DOS 游戏的广泛基础和兼容 DOSBox 的 DOS 游戏设计;并且还是...
阅读全文 |
评论次数(0) |
浏览次数(145) |
所属类型(DOSBox-X)
[2023-05-13 12:35] 7.4 节 交叉循环方法:转换字符串大、小写字母字符
书本所用的方法是,使用两个并列的 loop 循环,分别实现两个字符串大、小写字母的转换。其中以下 3 条指令存在重复使用:
mov al,[bx]
mov [bx],al
inc bx
为避免重复使用相同代码,以达到减少代码量目的,设计以下算法:
assume cs:codesg,ds:datasg
datasg segment
db 'BaSiC'
db 'iNfOrMaTiOn'
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax ; 设置 ds 指向...
mov al,[bx]
mov [bx],al
inc bx
为避免重复使用相同代码,以达到减少代码量目的,设计以下算法:
assume cs:codesg,ds:datasg
datasg segment
db 'BaSiC'
db 'iNfOrMaTiOn'
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax ; 设置 ds 指向...
阅读全文 |
评论次数(0) |
浏览次数(111) |
所属类型(虎嘯荆丛)
[2023-05-09 19:22] 第6章 实验5 编写、调试具有多个段的程序
实验 5 编写、调试具有多个段的程序
1. 将下面的程序编译、连接,用 Debug 加裁、跟踪,然后回答问题。
assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ax...
1. 将下面的程序编译、连接,用 Debug 加裁、跟踪,然后回答问题。
assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ax...
阅读全文 |
评论次数(0) |
浏览次数(124) |
所属类型(课程实验)
[2023-05-03 13:20] 第6章 检测点 6.1
检测点 6.1
(1) 以下程序实现依次用内存 0:0~0:15 单元中的内容改写程序中的数据。
思路:将 0000:0000~0000:0015 这 8 个字单元中的数据写入由程序 dw 指令所分配的 8 个字型单元空间中 —— 而不是将 dw 定义的 8 个字型数据存入 0000:0000~0000:0015 单元。
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start: mov ax,0
mov ds,ax
...
(1) 以下程序实现依次用内存 0:0~0:15 单元中的内容改写程序中的数据。
思路:将 0000:0000~0000:0015 这 8 个字单元中的数据写入由程序 dw 指令所分配的 8 个字型单元空间中 —— 而不是将 dw 定义的 8 个字型数据存入 0000:0000~0000:0015 单元。
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start: mov ax,0
mov ds,ax
...
阅读全文 |
评论次数(0) |
浏览次数(112) |
所属类型(汇编作业)
[2023-05-01 14:46] 第5章 实验4 [bx] 和 loop 的使用
实验 4 [bx] 和 loop 的使用
(1) 编程,向内存 0:200~0:23F 依次传送数据 0~63(3FH)。
将内存 0:200~0:23F 改换成 0020:0~0020:3F,使得内存单元的偏移地址范围成为 0~3F,以与需要传送的数据值 0~63(3FH)一致。注意,这是字节型数据的复制。编程如下:
方法 1:设置 CX 寄存器存储的数据与需要复制的数据相等,直接将 CX 寄存器中的数据复制到指定内存单元
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov cx,3Fh
...
(1) 编程,向内存 0:200~0:23F 依次传送数据 0~63(3FH)。
将内存 0:200~0:23F 改换成 0020:0~0020:3F,使得内存单元的偏移地址范围成为 0~3F,以与需要传送的数据值 0~63(3FH)一致。注意,这是字节型数据的复制。编程如下:
方法 1:设置 CX 寄存器存储的数据与需要复制的数据相等,直接将 CX 寄存器中的数据复制到指定内存单元
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov cx,3Fh
...
阅读全文 |
评论次数(0) |
浏览次数(112) |
所属类型(课程实验)
[2023-04-30 16:40] 第5章 问题 5.4
问题 5.4
应用 loop 指令,改进程序 5.5,使程序的代码行数能让人接受。可以有如下 2 种方法:
方法 1:
assume cs:code
code segment
mov ax,0ffffh
mov ds,ax ; 设置 (ds)=ffffh
mov dx,0 ; 初始化累加寄存器,(dx)=0
mov cx,0bh ; 初始化累加计数寄存器,(cx)=0bh
s:
mov bx,cx
mov al,[bx]
mov ah,0 ; (ax)=((ds)*16+Xh)...
应用 loop 指令,改进程序 5.5,使程序的代码行数能让人接受。可以有如下 2 种方法:
方法 1:
assume cs:code
code segment
mov ax,0ffffh
mov ds,ax ; 设置 (ds)=ffffh
mov dx,0 ; 初始化累加寄存器,(dx)=0
mov cx,0bh ; 初始化累加计数寄存器,(cx)=0bh
s:
mov bx,cx
mov al,[bx]
mov ah,0 ; (ax)=((ds)*16+Xh)...
阅读全文 |
评论次数(0) |
浏览次数(124) |
所属类型(问题分析)
[2023-04-28 17:12] 第5章 问题 5.3
问题 5.3
改进“问题 5.2”中的程序代码,提高 123*236 的计算速度。书本思路:将 123*236 的乘数和被乘数颠倒。
基于书本的思路,可以有更快的计算速度:除颠倒乘数和被乘数位置而变成 236*123 外,可以使用将式子变换为 236*2ⁿ,再将乘数 123 与 2ⁿ 进行迭代比较,使两者不断接近直至达到两者之差最小(0、1 或 -1),然后对计算结果进行适当修正(如果需要的话)以使两者完全相等。
236*2ⁿ 可以通过 loop 循环的方法来实现:
mov ax,236
s: add ax,ax
...
loop s
程序代码如下(以 236*3、...
改进“问题 5.2”中的程序代码,提高 123*236 的计算速度。书本思路:将 123*236 的乘数和被乘数颠倒。
基于书本的思路,可以有更快的计算速度:除颠倒乘数和被乘数位置而变成 236*123 外,可以使用将式子变换为 236*2ⁿ,再将乘数 123 与 2ⁿ 进行迭代比较,使两者不断接近直至达到两者之差最小(0、1 或 -1),然后对计算结果进行适当修正(如果需要的话)以使两者完全相等。
236*2ⁿ 可以通过 loop 循环的方法来实现:
mov ax,236
s: add ax,ax
...
loop s
程序代码如下(以 236*3、...
阅读全文 |
评论次数(0) |
浏览次数(113) |
所属类型(问题分析)
[2023-04-28 16:57] 第5章 问题 5.1
问题 5.1
指令和内存地址 21000H~21007H 存储单元所存储的数据情况如下:
mov ax,2000H 数据 地址
mov ds,ax BE 21000H
mov bx,1000H 00 21001H
mov ax,[bx] 21002H
inc bx 21003H
inc bx 21004H
mov [bx],ax 21005H
inc bx ...
指令和内存地址 21000H~21007H 存储单元所存储的数据情况如下:
mov ax,2000H 数据 地址
mov ds,ax BE 21000H
mov bx,1000H 00 21001H
mov ax,[bx] 21002H
inc bx 21003H
inc bx 21004H
mov [bx],ax 21005H
inc bx ...
阅读全文 |
评论次数(0) |
浏览次数(103) |
所属类型(问题分析)