汇编语言-汇编程序初识
汇编语言-汇编程序初识
指令介绍:
mov ax,bx
mov ax,bx
将bx寄存器中的数据复制移动到ax中
add ax,bx
add ax,bx
执行ax+bx运算,将运算结果赋值给ax,即ax = ax+bx;
sub ax,bx
sub ax,bx
执行ax-bx运算,将运算结果赋值给ax,即ax = ax-bx;
inc ax
inc ax
执行 ax+1 运算,将运算结果赋值给ax,即ax = ax+1 ;
jmp cs:ip
jmp 1000:0或 jmp 1000
第一种方式:设置cs(指令存放段地址)为1000,设置ip(指令存放地址偏移量)为0.
第二种方式:设置ip(指令存放地址偏移量)为1000.
push
push指令执行步骤:
- SP = SP-2
- 向SS:SP指向的字单元中送入数据
pop指令执行步骤:
- 从SS:SP指向的字单元中读取数据
- SP = SP+2
举例说明
//下面描述了向一个10000H~1000FH这段空间当作栈,进行了入栈出栈操作。
//初始化栈的段地址和地址偏移量
mov ax,1000
mov ss,ax
mov sp,0010
//设置数据
mov ax,001A
mov bx,001B
//入栈
push ax
push bx
//清零
sub ax,ax
sub bx,bx
//出栈
pop bx
pop ax
汇编程序
介绍完了指令,下面我们来介绍如何编写,编译,链接,运行一个汇编程序吧。
编写
打开文本编辑器,编写下面文字,存储为.asm
类型的文件。之后,我们用test.asm
文件举例。
assume cs:abe
abe segment
mov ax,2H
add ax,ax
add ax,ax
mov ax,4c00H
int 21H
abe ends
end
知识点介绍:
-
segment …ends
segment ...ends
为成对使用的定义段的伪指令。在编译的时候,被编译器翻译为一个段。这里面的段和我们之前提到的内存中的段是一个道理。segment
表示段的开始,ends
表示段的结束,一个汇编程序是由多个段组成的,这些段被用来存放代码,数据,堆栈来使用。abe
为段的名字,我们叫它标号,一个标号代表一个地址。 -
end
end
是一个汇编程序的结束标记,编辑器在编译汇编程序的过程中,如果碰到了伪指令end
,就结束对汇编程序的编译,即编译结束。 -
assume
assume
这条指令,假设某一段寄存器和程序中的某一个segment... ends
定义的段相关联。通过assume说明这种关联,在需要的情况下可以将段寄存器和某一个具体的段相关联。 -
程序结束符号
下面这两行代码表示结束程序。
mov ax,2c00H
int 21H
编译
我使用的是masm 5.0,来编译文件。编译,就是将我们之前编写的代码,编程机器可读的机器码。通过编译,我们将编辑文件,编译成了目标文件。(test.asm -> test.obj)
下面是运行图片:
链接
我使用的是overlay linker3.60,通过连接,我们将编译生成的目标文件连接成可执行文件。(test.obj -> test.exe)
下面是运行图片:
执行
输入下面命令行即可: