0401 用汇编语言写的源程序

用汇编语言编写程序的工作过程

image-20230903225101168

汇编程序的构成:包含汇编指令和伪指令的文本

image-20230903225300141

伪指令

伪指令:没有对应的机器码的指令,最终不被CPU所执行。

谁来执行伪指令呢?——伪指令是由编译器来执行的指令,编译器根据伪指令来进行相关的编译工作

汇编指令

汇编指令,对应有机器码的指令,可以被编译为机器指令,最终被CPU执行

程序返回(套路,是固定的两行汇编指令)
1
2
mov ax,4c00h
int 21h

程序返回(套路):程序结束运行后,将CPU的控制权交还给使它得以运行的程序(常为DOS系统),相当于C语言中的return 0

程序中的3种伪指令

image-20230903225940269

段定义

一个汇编程序是由多个段组成的,这些段被用来存放代码、数据或当作栈空间来使用。

一个有意义的汇编程序中至少要有一个段,这个段用来存放代码。

定义程序中的段:每个段都需要有段名

1
2
3
4
5
段名 segment ——段的开始

………………

段名 ends ——段的结束

end (不是ends)

汇编程序的结束标记。若程序结尾处不加end,编译器在编译程序时,无法知道程序在何处结束。

assume(假设)

含义是假设某一段寄存器和程序中的某一个用 segment … ends 定义的段相关联

比如assume cs:codesg指CS寄存器与codesg关联,将定义的codesg当作程序的代码段使用。

笔者注:即表示将codesg这个代码段首行汇编代码地址放入CS寄存器

源程序经编译连接后变为机器码

image-20230903230338046

汇编程序的结构

在Debug中直接写入指令编写的汇编程序

  • 适用于功能简单、短小精悍的程序
  • 只需要包含汇编指令即可

image-20230903230635669

单独编写成源文件后再编译为可执行文件的程序

  • 适用于编写大程序
  • 需要包括汇编指令,还要有指导编译器工作的伪指令
  • 源程序由一些段构成,这些段存放代码、数据,或将某个段当作栈空间。

image-20230903230647993

汇编语言的注释

; ——注释

如何写出一个程序来——思路是重点

例:编程求 2^3

思路:

①定义一个段

image-20230903230900115

②实现处理任务

image-20230903230918330

③指出程序在何结束

image-20230903230927931

④段与段寄存器关联

image-20230903230935392

⑤加上程序返回的代码

image-20230903230946800

程序中可能的错误

语法错误

程序在编译时被编译器发现的错误;

容易发现下面程序中错误

1
2
3
4
5
6
aume cs:abc  ;此处assume写错
abc segment
mov ax,2
add ax,ax
add ax,sx
end

逻辑错误

程序在编译时不能表现出来的、在运行时发生的错误;

不容易发现下面程序中的错误

1
2
3
4
5
6
7
8
9
assume cs:abc
abc segment
mov ax,2
add ax,ax
add ax,bx ;这是求2^3,此处显然错误
mov ax,4c10H
int 21H
abc ends
end

站内搜索

没有找到内容!