1、用汇编语言编写程序
汇编程序:包含汇编指令和伪指令的文本
伪指令
没有对应的机器码的指令,最终不被CPU所 执行。
谁来执行伪指令呢?
伪指令是由编译器来执行的指令,编译器根据伪指令来进行相关的编译工作。
程序返回:
程序结束运行后,将 CPU的控制权交还给使它得以运行的程序 (常为DOS系统)。
2、程序中的三种伪指令
assume cs:codesg codesg segment mov ax,0123H mov bx,0456H add ax,bx add ax,ax mov ax,4c00h int 21h codesg ends end
段定义
一个汇编程序是由多个段组成的,这些段被用来存放代码、数据 或当作栈空间来使用。
一个有意义的汇编程序中至少要有一个段,这个段用来存放代码。
定义程序中的段:每个段都需要有段名
段名 segment ——段的开始
....
段名 ends ——段的结束
end (不是ends)
汇编程序的结束标记。若程序结尾处不加end,编译器在编译程序 时,无法知道程序在何处结束。
assume(假设)
含义是假设某一段寄存器和程序中的某一个用 segment … ends 定义的段相关联——assume cs:codesg指CS寄存器与codesg关联,将定义的codesg当作程序的代码段使用。
3、源程序经编译连接后变为机器码
4、汇编程序的结构
在Debug中直接写入指令编写的汇编程序
适用于功能简单、短小精悍的程序 ;
只需要包含汇编指令即可
单独编写成源文件后再编译为可执行文件的程序
适用于编写大程序
需要包括汇编指令,还要有指导编译器工作的伪指令
源程序由一些段构成,这些段存放代码、数 据,或将某个段当作栈空间。
---注释
assume cs:code,ds:data,ss:stack data segment dw 0123H,0456H,0789H,0abcH,0defH data ends stack segment dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 stack ends code segment mov ax,stack mov ss,ax mov sp,20h ;设置栈段 mov ax,data mov ds,ax ;设置数据段 mov bx,0 mov cx,8 s: push [bx] add bx,2 loop s .... code ends end
5、如何写出一个程序来?
①定义一个段
②实现处理任务
③指出程序在何结束
④段与段寄存器关联
⑤加上程序返回的代码
6、程序中可能的错误
语法错误
程序在编译时被编译器发现的错误;
容易发现下面程序中错误
aume cs:abc abc segment mov ax,2 add ax,ax add ax,sx end
逻辑错误
程序在编译时不能表现出来的、在运行时 发生的错误;
不容易发现下面程序中的错误
assume cs:abc abc segment mov ax,2 add ax,ax add ax,bx mov ax,4c10H int 21H abc ends end