参考:《汇编语言》 王爽 第四章
1.一个源程序从写到执行的过程
第一步:编写汇编源程序
第二步:对源程序进行编译连接
第三步:在操作系统中执行
2.源程序
代码:
- assume cs:first
- first segment
- start: mov ax,2
- add ax,ax
- add ax,ax
- mov ax,4C00H
- int 21H
- first ends
- 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
设计资源 培训 开发板 精华推荐
- 劳动五月 晒“现场”,谁是电子工作狂?
- 《模拟对话》50周年大合集(2013-2016)
- 有奖直播:Keysight《AI热潮下新技术》系列讲座
- 芯币 积分礼品兑换
- 直播已结束|安世新一代高效的氮化镓(GaN)电源设计方案
- 【温故喝新之单片机版块】温2016年MCUs,喝2017年版块新篇章
- dsPIC33 “EV”系列抢鲜知,读专题,赢豪礼
- 下载应用文章有礼啦!新方案新标准:助你克服第四代I/O应用中的接收机测试挑战!
- 有奖直播:DIY 家用监控边缘 AI Box——基于 8TOPS 算力,售价 199 美元的开发套件搭建深度学习案例
- 有奖问答 | Azure Sphere物联网解决方案 问答排位赛,你能霸屏多久?