×
嵌入式 > 技术百科 > 详情

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

发布时间:2020-06-13 发布时间:
|
疯狂的暑假学习之  汇编入门学习笔记 (三)—— 第一个程序

 

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

 

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结束。




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
实时控制.安全.如何加速实现未来工厂落地?