【汇编语言】汇编语言程序

【汇编语言】汇编语言程序



前言

本篇文章将详细讲到用汇编语言写的源程序,由源程序到程序运行的过程,用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 segment

mov ax,2
add ax,ax
add ax,ax

abc ends

3、
abc segment

mov ax,2
add ax,ax
add ax,ax

abc ends

end

4、

assume cs:abc

abc segment

mov ax,2
add ax,ax
add ax,ax

abc ends

end

5、

assume cs:abc

abc segment

mov ax,2
add ax,ax
add ax,ax

mov ax 4c00h
int 21h

abc 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


二、由源程序到程序运行

由源程序到执行可执行文件的过程

在这里插入图片描述

编译

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值