汇编–手把手教你运行第一个汇编程序(编译、连接)

  • Post author:
  • Post category:其他




第四章 第一个程序

首先回顾一下栈的基础知识:

栈的特点:先入后出

对于8086,其pop、push指令操作如下:


pop:数据出栈,sp+2


push:sp-2,数据入栈

然后回顾一下win32的debug指令:(出于个人习惯,有些步骤不是必要的)


首先进入debug


cd c:\


c\>:debug


指令r:查看、修改寄存器的值,可以操控cs,ip。但是在汇编程序中不可以直接修改ip


r 查看寄存器值


r register_name 修改寄存器值


指令d: 查看内存中的内容


d 段地址:偏移地址 <结尾偏移地址>


结尾偏移地址可以省略,默认显示128个内存单元。如果参数全部缺省,从debug预设地址开始


指令e :改写内存中的内容


e 段地址:偏移地址 内容(字符用引号括起)


指令u:将机器码翻译为汇编代码


u 段地址:偏移地址


指令t:单步执行,从cs:ip地址开始


指令a:以汇编形式向内存中写入汇编指令


a 段地址:偏移地址



4.1 源程序到执行

编写-编译、链接-执行



4.2 程序示例

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


segment ends配套使用,代表段开始、结束


end 代表程序结束


assume:将段同段寄存器关联起来

//代码段、堆栈段、寄存器段等

伪指令编译后成为描述信息。


mov ax,4c00h


int 21h

上述两句实现程序返回的功能。



4.3 源程序的编辑

使用edit


cd c:\


c:\>edit //进入edit

在这里插入图片描述


File->save-><路径>file_name.asm//路径可缺省

或者用键盘上下左右键选择到

Directories,按enter进入想保存目录下即可



4.4 编译


cd masm所在路径


masm

我的程序在masm下的demo目录里,编译过程如下,.obj文件名默认,后几个文件未生成。

在这里插入图片描述



4.5 连接

在这里插入图片描述

obj文件在masm下,demo的建立貌似多此一举,所以可以不建demo文件夹,直接存在masm下就好

在这里插入图片描述

在这里插入图片描述



4.6 简化方式的编译与连接


masm 文件路径+文件名(无后缀);

link同上

把所有文件直接放在c或者d盘最方便(路径段,容易输入)

在这里插入图片描述



4.9 程序执行过程跟踪


debug 路径+文件名

debug加载程序后,cx存放程序的长度。

debug调用时,会创建psp用来和程序通信,psp和程序的物理地址连续,但是段地址不同



p

指令执行

int 21h

psp段地址为ds,偏移地址为0

程序执行过程跟踪


debug 路径+文件名

debug加载程序后,cx存放程序的长度。

debug调用时,会创建psp用来和程序通信,psp和程序的物理地址连续,但是段地址不同



p

指令执行

int 21h

psp段地址为ds,偏移地址为0



版权声明:本文为weixin_45118086原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。