汇编语言学习记录01丨开发工具安装及编译运行第一个程序
汇编语言开发工具安装
首先安装VS Code(建议下载最新版,否则有可能会与的下面拓展版本不兼容)
安装完成VS Code后,点击拓展——搜索MASM/TASM
拓展——安装。
由于课程需要,我会选择MASM
作为汇编工具,选择DOSBox
作为16位模拟器,这些都可以在VSCode的拓展设置中进行设置,如下图:
简单几步即可开始敲汇编代码了😄
该拓展的Github地址戳这
第一个汇编程序
汇编程序从写出到执行的过程如下图,而VSCode+MASM/TASM拓展即直接将“编译-连接-加载”整合为一键执行了。
实验课代码如下:(注意,文件命名后缀为.asm
)
assume cs:codesg, ds:datasg
datasg segment ;定义数据段
a db 2 ;define byte, 一个字节(8位)
b dw 2 ;define word, 一个字(16位)
a1 dd 2;一个双字(32位)
d equ 2
num1 db 3
num2 db 5
num3 db ?
datasg ends
codesg segment ;定义名称为codesg的代码段
start:
mov ax, datasg; datasg是一个地址
mov ds, ax ;CPU将定义的数据段中的内容当作数据做访问
;加法运算如下:
mov al, num1
add al, num2
mov num3, al
mov ax, 4c00h ;程序返回语句之一
int 21h ;程序返回语句之一
codesg ends ;名称为codesg的代码段到此结束
end start ;end指令指明程序入口在标号start处
我们使用Debug来跟踪上面程序的执行过程(VSCode右键-选择“调试当前程序”)
Debug相关指令
指令 | 功能 |
---|---|
R |
(与寄存器相关)查看CPU寄存器内容 |
D |
查看内存中的内容 |
E |
改写内存中的内容 |
U |
将内存中的机器指令翻译成汇编指令 |
T |
执行一条机器指令 |
P |
执行循环、重复的字符串指令、软件中断或子例程 |
跟踪过程:
-
观察内存中
a
、b
、a1
三个变量所分配存储空间的大小。输入指令
-d ds:0
注意,这句指令的含义为,列出 从 段地址
ds
、偏移地址0
的内存单元 开始的128个内存单元的内容一个内存单元可存放8位数据,而16进制数的一位相当于2进制数的四位。
由于
a
为一个字节,因而它可存在一个内存单元当中,显示为00
;b
为一个字,因而它占用两个内存单元(2个字节=16位),显示为00 00
;c
为一个双字,故占用四个内存单元,显示为00 00 00 00
。注意,字的高位字节和低位字节分别存在内存单元的高位和低位。上图中每一行的地址,共有16个内存单元,越往右的内存单元,地址越高。故对于
b
(值为0002
)而言,实际存储为:低8位内存单元存02
、高8位内存单元存00
。 -
显示内存中
num1
、num2
、num3
中存储的数据。 -
显示程序运行过程中各寄存器的内容。(着重关注AX寄存器)
运行前
运行过程中:
AX寄存器的低8位寄存器AL(原值为
6E
),被赋值为03
。执行加法指令
ADD
,AL寄存器值加上num2
的值故变为08
了。最后,程序结束
-
打印程序运行结果
注意到
num3
内存单元存入值08
。