汇编入门学习笔记 (三) —— 第一个程序

发布者:之敖赵先生最新更新时间:2016-06-24 来源: eefocus关键字:汇编入门  第一个程序 手机看文章 扫描二维码
随时随地手机看文章
疯狂的暑假学习之  汇编入门学习笔记 (三)—— 第一个程序

 

参考:《汇编语言》 王爽  第四章

 

1.一个源程序从写到执行的过程

第一步:编写汇编源程序

第二步:对源程序进行编译连接

第三步:在操作系统中执行

 

2.源程序

 

代码:

 

 
  1. assume cs:first  
  2.   
  3. first segment  
  4. start:  mov ax,2  
  5.     add ax,ax  
  6.     add ax,ax  
  7.   
  8.     mov ax,4C00H  
  9.     int 21H  
  10. first ends  
  11.   
  12. end start  

 

代码解释:

assume 、segment、ends、end 等都是伪指令

 

end  表示 程序结束。

segment与ends(注意与end的区分)成对出现,表示一个段,segment前面的 first 表示段的名字,标号,可以任意取。一个程序至少有一个段。

assume  用来把寄存器跟段关联起来。

start:这个可以随便取名字,但要与end 后面的一样。表示程序的入口。CS:IP 指向。

 

 

3.编译连接

 

(在win7 64位,可能有问题,用DOSBox 模拟)

 

使用masm编译,link链接

把上面的代码保存到 1.asm中

 

编译:在cmd中输入 masm 1.asm;  生成 1.obj

链接:在cmd中输入 link 1.obj;  生成 1.exe

 

4.程序的运行

 

在cmd中输入1 ,运行不会有任何输出,一闪而过

 

程序的运行过程:首先必须有一个正在运行的P1程序,将要运行的P2程序从可执行文件中加载进入内存后将CPU控制权交给P2,P2才能运行。P2开始运行后P1暂停运行。当P2运行完毕后,将CPU的控制权交给P1,此后P1继续运行。DOS中运行1.exe P1可以是command,将1.exe加载如内存。command设置CPU的CS:IP z指向程序的第一条指令(即程序的入口),从而使其运行。程序运行结束后,返回command,CPU继续运行command。

 

前面代码中的:mov ax,4C00H

                         int 21H

功能就是程序返回

int 跟c英语中的int没有任何关系,表示中断。

 

5.程序执行过程的跟踪

 

在cmd中输入:debug 1.exe  即可跟踪运行1.exe

这时输入r查看寄存器信息,可以看到CX存放源程序中指令的长度。

DS跟CS相差0010H,原因:

程序在运行前,DOS系统先找到一个XX:0000H地址,在这段内存区的前256个这个中 创建一个程序段前缀(PSP)的数据区,DOS要利用PSP来和被加载的程序进行通信。从XX:0010H开始将程序装入。

 

输入t 单步执行,到int 21H时,输入p结束。

关键字:汇编入门  第一个程序 引用地址:汇编入门学习笔记 (三) —— 第一个程序

上一篇:汇编入门学习笔记 (四)—— [BX] 和 loop指令
下一篇:汇编入门学习笔记 (二)—— 寄存器(内存访问)、栈

推荐阅读最新更新时间:2024-03-16 14:58

STC51从入门到精通(汇编)~~~ 第二讲:存储器
2.1 存储器种类 存储器是计算机结构的重要组成部分。存储器是用来存储程序代码和数据的部件,有了存储器计算机才具有记忆功能。 存储器按其存储介质特性主要分为“ 易失性存储器”和“非易失性存储器”两大类。其中的“易失/非易失”是指存储器断电后,它存储的数据内容是否会丢失的特性。由于一般易失性存储器存取速度快,而非易失性存储器可长期保存数据,它们都在计算机中占据着重要角色。在计算机中易失性存储器最典型的代表是内存,非易失性存储器的代表则是硬盘。 2.2 易失性存储器 --- RAM 存储器 RAM 是“ Random Access Memory”的缩写,被译为随机存储器。所谓“随机存取”,指的是当存储器中
[单片机]
STC51从<font color='red'>入门</font>到精通(<font color='red'>汇编</font>)~~~ 第二讲:存储器
ARM的第一个程序(基于LPC2134)
#include config.h //流水灯数值表 int Led_Table ={ 0x00fe0000,0x00fd0000,0x00fb0000,0x00f70000,0x00ef0000, 0x00df0000,0x00bf0000,0x007f0000}; //主函数 int main() { int i=0; PINSEL1=0x00000000; IO1DIR=0xff 16; //这个写法很清楚,推荐 while(1) { IO1SET=Led_Table ; //设置高电平引脚 IO1CLR=~L
[单片机]
ARM的<font color='red'>第一个</font><font color='red'>程序</font>(基于LPC2134)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved