汇编网首页登录博客注册
unixandlinux的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新评论
最新留言
好友圈
友情链接

[2023-04-21 18:24] 《汇编语言》(王爽 著) —— 学习笔记(第4章)

第 4 章 第一个程序

前述章节都是在 Debug 中编写和运行写指令,本章开始学习编写完整的汇编语言程序,用编译和连接程序将汇编源程序编译连接成可执行文件(如 *.exe 文件),在操作系统中运行。

4.1 一个源程序从写出到执行的过程

第一步:编写汇编源程序
通过文本编辑器(Edit、记事本等),用汇编语言编写汇编源程序,形成一个存储源程序的文本文件。

第二步:对源程序进行编译连接
用汇编语言编译程序编译源程序,生成目标文件;再用连接程序对目标文件进行连接,生成可在操作系统中直接运行的可执行文件。
可执行文件包含两部分内容:
1. 程序(从源程序中的汇编指令...
阅读全文 | 评论次数(0) | 浏览次数(142) | 所属类型(学习笔记)

[2023-04-21 17:56] 第4章 实验3 编程、编译、连接、跟踪

实验3 编程、编译、连接、跟踪

(1) 将下面的程序保存为 t1.asm 文件,将其生成可执行文件 t1.exe。
assume cs:codesg

codesg segment

        mov ax,2000H
        mov ss,ax
        mov sp,0
        add sp,10
        pop ax
        pop bx
        push ax
        push bx
        pop ax
        pop bx
        mov ax,4c00H
        int 21H

codesg ends

end
        编译命令:
masm t1;
        连接命令:
link t1;

(2) 用 Deb...
阅读全文 | 评论次数(0) | 浏览次数(157) | 所属类型(课程实验)

[2023-04-19 11:05] 《汇编语言》(王爽 著) —— 学习笔记(第3章)

第 3 章 寄存器(内存访问)

第 2 章主要从 CPU 如何执行指令的角度学习 8086 CPU 的逻辑结构、形成物理地址的方法、相关的寄存器
以及一些指令。本章将从访问内存的角度继续学习几个寄存器。

3.1 内存中字的存储

CPU 中,用 16 位寄存器来存储一个字。高 8 位存放高位字节,低 8 位存放低位字节。在内存中存储时,由于内存单元是字节单元(一个单元存放一个字节),则一个字要用两个地址连续的内存单元来存放,这个字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。
由此提出字单元的概念:字单元,即存放一个字型数据(16 位)的内存单元,由两个地址连续...
阅读全文 | 评论次数(0) | 浏览次数(124) | 所属类型(学习笔记)

[2023-04-19 10:06] 第3章 实验2 用机器指令和汇编指令编程

实验2 用机器指令和汇编指令编程

一、预备知识:Debug 的使用
 
1. 关于D命令

D命令的功能是查看指定内存单元所存储的数据信息。其命令格式在实验1中给出如下:
d 段地址:偏移地址
D命令是由Debug执行的,在上面的命令格式中,直接给出了段地址和偏移地址;在执行这样的命令格式的D命令时,Debug会先将段地址传送到段寄存器中再执行D命令的查看数据操作。
Debug执行D命令也是通过CPU启动一段程序来运行的。也就是说,CPU通过段寄存器读取D命令格式中提供的段地址来查找目标内存单元,然后读取其存储的数据并显示出来。
CPU的段寄存器共有4个,CS、DS、SS...
阅读全文 | 评论次数(0) | 浏览次数(133) | 所属类型(课程实验)

[2023-04-18 21:25] 第3章 检测点 3.2

检测点 3.2

(1) 补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序复制到20000H~2000FH中。逆序复制的含义如下表所示(表中内存里的数据均为假设)。

 地址 数据(十六进制)  地址   数据(十六进制)
10000H      23   20000H      33
10001H      01   20001H      11
10002H      66   20002H      FE
10003H      22   20003H      9A
...               ...                        
1000CH      FE ...
阅读全文 | 评论次数(0) | 浏览次数(121) | 所属类型(汇编作业)

[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...
阅读全文 | 评论次数(0) | 浏览次数(110) | 所属类型(问题分析)

[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...
阅读全文 | 评论次数(0) | 浏览次数(162) | 所属类型(问题分析)

[2023-04-18 10:18] 存疑:《汇编语言》(王爽 著)(第3版)

第2章
1. p25第4行
原文:
结论:偏移地址16位,变化范围为 0~FFFFH,仅用偏移地址来寻址最多可寻64KB个内存单元。
存疑:
“64KB个内存单元”是否应该改为“64K个内存单元”?因为内存单元的数量单位是“个”,而“B”是“Byte”的简写,意为“字节”,是内存单元存储信息的容量单位,不应与内存单元的数量“个”合在一起使用。如果一定要用“B”,则可以改为:“64KB内存单元”,即去掉“个”字。这样就能知道所述的寻址能力最大容量为64KB。
2. p41 实验1 倒数第4行
原文:
... 数值2、字符串“c++”、字符3、字符串“IBM”...
存疑:其中的...
阅读全文 | 评论次数(0) | 浏览次数(125) | 所属类型(学习笔记)

[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...
阅读全文 | 评论次数(0) | 浏览次数(139) | 所属类型(问题分析)

[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
注意,栈空间中出、入栈遵循的规则是“后进先出”...
阅读全文 | 评论次数(0) | 浏览次数(121) | 所属类型(问题分析)
页码数(7):  1  2  3  4  5  6  7