【汇编语言】汇编语言程序
文章目录
前言
本篇文章将详细讲到用汇编语言写的源程序,由源程序到程序运行的过程,用Debug跟踪程序的执行,[……]和(……)的区别,Loop指令的详细介绍和使用,段前缀的使用,如何在代码段中使用数据,在代码段中使用栈以及将数据,代码,栈放入不同段。
一、用汇编语言写的源程序
汇编语言编写程序的工作过程
汇编程序:包含汇编指令和伪指令的文本。
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
程序中的三种伪指令
源程序编译链接后变为机器码
汇编程序的结构
- 在Debug中直接写入指令编写的汇编程序:
1、适用于功能简单、短小精悍的程序
2、只需要包含汇编指令即可 - 单独编写成源文件后再编译为可执行文件的程序:
1、适用于编写大程序
2、需要包括汇编指令,还要有指导编译器工作的伪指令
3、源程序由一些段构成,这些段存放代码、数据,或将某个段当作栈空间 - ; —注释
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
代码段不用设置。
如何写出一个程序来
例:编程求2^3。
1、定义一个段
2、实现处理任务
3、指出程序在何处结束
4、段与段寄存器关联
5、加上程序返回代码
1、
abc segment
abc ends
2、
abc segmentmov ax,2
add ax,ax
add ax,axabc ends
3、
abc segmentmov ax,2
add ax,ax
add ax,axabc ends
end
4、
assume cs:abc
abc segment
mov ax,2
add ax,ax
add ax,axabc ends
end
5、
assume cs:abc
abc segment
mov ax,2
add ax,ax
add ax,axmov ax 4c00h
int 21habc ends
end
程序中可能的错误
- 语法错误
程序在编译时被编译器发现的错误;
容易发现下面程序中错误
aume cs:abc
abc segment
mov ax,2
add ax,ax
add ax,sx
end
1.assume写错2.没有段结束3.没有程序结束
- 逻辑错误
程序在编译时不能表现出来的、在运行时发生的错误;
不容易发现下面程序中的错误
求2^3
assume cs:abc
abc segment
mov ax,2
add ax,ax
add ax,bx ;寄存器写错
mov ax,4c10H;结束应为4c00h
int 21H
abc ends
end