练习汇编语言源程序的编辑、汇编和连接

合集下载

汇编程序编写、编译链接与DEBUG的跟踪执行

汇编程序编写、编译链接与DEBUG的跟踪执行

实验二编程、编译、链接、跟踪汇编程序实验名称:汇编程序编写、编译链接与DEBUG的跟踪执行实验目的:掌握汇编语言编写、编译、链接和执行的方法,掌握DEBUG跟踪执行程序的方法。

实验内容:•编写程序实现420030AB H+90B0D400 H•用AX 存放最后结果的低16 位•用BX 存放最后结果的高16 位•源文件名为exer1.asm ,进行编译连接生产可执行文件用DEBUG 程序跟踪执行过程,写出每条指令执行后,AX,BX、IP 寄存器中的内容,状态寄存器的内容。

assume cs:codecode segmentmov ax,30abhmov bx,4200hadd ax,0d400hadc bx,90b0hmov ax,4c00hint 21hcode endsendC:\Documents and Settings\Administrator>D:D:\>cd masmD:\masm>masm ex2.txtMicrosoft (R) Macro Assembler Version 5.10Copyright (C) Microsoft Corp 1981, 1988. All rights reserved.Object filename [ex2.OBJ]:Source listing [NUL.LST]:Cross-reference [NUL.CRF]:48870 + 393797 Bytes symbol space free0 Warning Errors0 Severe ErrorsD:\masm>link ex2Microsoft (R) Overlay Linker Version 3.64Copyright (C) Microsoft Corp 1983-1988. All rights reserved.Run File [EX2.EXE]:List File [NUL.MAP]:Libraries [.LIB]:LINK : warning L4021: no stack segmentD:\masm>ex2.exeD:\masm>debug ex2.exe-u1880:0000 B8AB30 MOV AX,30AB1880:0003 BB0042 MOV BX,42001880:0006 0500D4 ADD AX,D4001880:0009 81D3B090 ADC BX,90B01880:000D B8004C MOV AX,4C001880:0010 CD21 INT 211880:0012 22988BF0 AND BL,[BX+SI+F08B]1880:0016 83FEFF CMP SI,-011880:0019 741A JZ 00351880:001B 39760A CMP [BP+0A],SI1880:001E 7515 JNZ 0035-rAX=0000 BX=0000 CX=0012 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1870 ES=1870 SS=1880 CS=1880 IP=0000 NV UP EI PL NZ NA PO NC1880:0000 B8AB30 MOV AX,30AB-tAX=30AB BX=0000 CX=0012 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1870 ES=1870 SS=1880 CS=1880 IP=0003 NV UP EI PL NZ NA PO NC1880:0003 BB0042 MOV BX,4200-tAX=30AB BX=4200 CX=0012 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1870 ES=1870 SS=1880 CS=1880 IP=0006 NV UP EI PL NZ NA PO NC1880:0006 0500D4 ADD AX,D400-tAX=04AB BX=4200 CX=0012 DX=0000 SP=0000 BP=0000SI=0000 DI=0000DS=1870 ES=1870 SS=1880 CS=1880 IP=0009 NV UP EI PL NZ NA PO CY1880:0009 81D3B090 ADC BX,90B0-tAX=04AB BX=D2B1 CX=0012 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1870 ES=1870 SS=1880 CS=1880 IP=000D NV UP EI NG NZ NA PE NC1880:000D B8004C MOV AX,4C00-tAX=4C00 BX=D2B1 CX=0012 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1870 ES=1870 SS=1880 CS=1880 IP=0010 NV UP EI NG NZ NA PE NC1880:0010 CD21 INT 21。

汇编语言程序的上机过程

汇编语言程序的上机过程

汇编语言的上机过程汇编语言程序的上机过程包括编辑、汇编、连接和执行这四个步骤。

汇编程序我们提供宏汇编程序MASM5.0和MASM6.14两个版本。

1、建立源程序文件建立和编辑汇编语言源程序可以使用EDIT、记事本、写字本,也可以使用TC等来输入源程序。

保存时,源程序文件的扩展名必须是ASM。

练习:(1)在DOS下用编辑软件EDIT建立如下源程序文件,将文件保存为Hello.ASM,保存在MASM5目录下。

(调用命令“C:\EDIT”进入EDIT编辑器。

)源程序文件如下:DSEG SEGMENTMESSAGE DB 'HOW DO YOU DO?',0DH,0AH,24HDSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGBEGIN:MOV AX,DSEGMOV DS,AXMOV DX,OFFSET MESSAGEMOV AH,9INT 21HMOV AH,4CHINT 21HCSEG ENDSEND BEGIN(2)编程计算1+2+3+ ……+100,和放在AX寄存器中,要求用循环实现。

对于MASM5.0和MASM6.14两个版本,编译和连接的方法有所不同。

以下分别就两个版本的编译和连接的方法进行讲解。

如果使用MASM5.0的话,操作方法如下(以HELLO.ASM源程序文件为例):2、对源程序进行汇编,生成目标文件HELLO.OBJ。

操作:(1)在DOS下进入MASM5.0的目录,如C:\MASM5>(2)敲入命令: MASM HELLO说明:.obj文件:目标代码文件,纯二进制代码文件,不能直接显示在屏幕上。

.lst文件:包含源程序中各语句及其对应的目标代码,各语句的偏移量等相关信息,对调试程序有帮助,但一般情况不需要。

.crf文件:交叉索引文件,给出源程序中定义的符号引用情况,初学时不需建立。

3、连接目标文件,生成执行文件HELLO.EXE,操作:敲入命令LINK HELLO说明:.EXE文件:可执行文件.MAP文件:连接映象文件,包括各个段在存储器中的分配情况,初学时不需要。

c语言预处理编译汇编链接

c语言预处理编译汇编链接

c语言预处理编译汇编链接【原创版】目录1.C 语言预处理2.编译3.汇编4.链接正文C 语言预处理、编译、汇编和链接是编写 C 语言程序的重要步骤。

下面将详细介绍这四个步骤。

1.C 语言预处理C 语言预处理器负责处理源代码中的宏定义、头文件包含和条件编译等指令。

在编译之前,预处理器会读取源代码,并将这些指令替换为相应的代码。

例如,预处理器会将`#define PI 3.14159`替换为`PI 3.14159`,将`#include <stdio.h>`替换为`#include stdio.h`。

2.编译编译是将 C 语言源代码转换为目标语言(通常是汇编语言)的过程。

编译器负责这个任务。

它会检查源代码中的语法错误,并将其转换为目标语言。

例如,编译器将`int main() { printf("Hello, world!"); }`转换为`main: pushl hello world`(汇编语言)。

3.汇编汇编是将汇编语言代码转换为机器语言的过程。

汇编器负责这个任务。

它会将汇编语言代码转换为二进制代码,以便计算机可以执行。

例如,汇编器将`main: pushl hello world`转换为`0000000000000000 0110100101101010 0110101001101011 0110101001101010`(二进制代码)。

4.链接链接是将编译和汇编后的目标文件合并为一个可执行文件的过程。

链接器负责这个任务。

它会将各个目标文件中的代码和数据段合并为一个完整的程序。

例如,链接器将`main.o`(编译后的目标文件)和`printf.o`(汇编后的目标文件)合并为`main.out`(可执行文件)。

总之,C 语言预处理、编译、汇编和链接是编写 C 语言程序的重要环节。

微机实验一 汇编语言程序调试基础训练

微机实验一   汇编语言程序调试基础训练

实验一汇编语言程序调试基础训练实验目的:1、学习、掌握汇编程序的编辑、编译、链接的方法2、学习常用的DEBUG命令,掌握汇编程序调试方法3、通过调试程序,弄清汇编指令和机器码的关系4、弄清代码段、数据段、堆栈段中的段地址和偏移量的形成实验内容:1、源程序的编辑2、源程序的编译、链接3、汇编程序调试,完成相关数据的记录和分析实验步骤:一、源程序的编辑、编译、链接1、在E盘建立L8086文件夹,将L8086文件全部拷入该目录2、用EDIT或写字板编辑器,将例程BBADD.ASM输入计算机,以BBADD.ASM文件名保存程序3、用MASM.EXE工具将源程序编译成BBADD.OBJ文件4、用LINK.EXE工具将目标文件链接成BBADD.EXE可执行文件二、程序载入和退出1、进入DOS命令提示符界面2、将路径切换至:E>L8086>3、输入DEBUG BBADD.EXE 回车,此时程序载入到DEBUG调试状态4、按Q回车,则退出调试状态返回到操作系统三、程序的调试1、在DEBUG调试状态,输入U回车,显示此时可以看到源程序经编译后,载入到计算机内存中每一条指令所对应的机器码;可以看到指令在代码段中所处的段地址和偏移量等信息。

对照源程序填写以下信息:程序起始地址:[ :]程序结尾地址:[ :]用户数据段地址:[ ]变量R0分得的地址:[ ]变量R2分得的地址:[ ]变量R3分得的地址:[ ]变量R4分得的地址:[ ]以上信息说明:U命令可以显示反汇编信息2、输入R回车,显示以下的信息:这是CPU内所有寄存器信息,注意观察和记录(1)段地址信息:CS=DS=SS=ES=(2)通用寄存器信息:AX= BX= CX= DX= SI= DI= BP=(3)观察IP 、SP指针和标志标志寄存器状态3、输入RAX 回车,接着输入55AA回车,再输入R命令回车,显示以下信息:此时发现AX=55AAH,说明R命令可以显示和修改寄存器的值输入D回车,显示以下信息这是操作系统当前的数据段,观察当前的段地址和你前面记录的用户段地址是不一样的,左边的信息是数据段的段地址和偏移量,右边是每一个单元和相对的值,用D命令可以查看数据段的信息。

实验二简单程序的编写及汇编连接

实验二简单程序的编写及汇编连接

实验二简单程序的编写及汇编连接实验二简单程序的编写及汇编连接一、实验目的1.熟练掌握编写汇编语言源程序的基本方法和程序的基本框架。

2.学会编写顺序结构、分支结构和循环结构的汇编程序。

3.掌握程序中数据的产生与数输出的方法。

4.熟悉建立源文件,进行汇编和连接的全过程,并对程序进行调试。

二、实验要求1.预习附录2的内容2.实验前准备①分析题目,将程序中的原始数据、中间结果和最终结果的存取方式确定好。

②写出算法或画出流程图。

③写出源程序。

④对程序中的结果进行分析,并准备好上机调试的过程。

3.本实验要求在PC机上进行。

4.汇编过程中出现问题,可用DEBUG进行调试。

三、实验内容1.实验内容1①用EDIT应用程序编辑源程序(参考程序见下),建立.ASM文件;②用MASM程序汇编该文件,生成.OBJ文件;查看.LST文件的内容③用LINK程序链接,生成.EXE文件;④使用DEBUG命令将.EXE文件调进内存,执行后查看程序运行结果;⑤使用DEBUG命令,检查各段在内存当中分配情况。

参考程序:; exercize21data segmentorg 0200hbuffer dw 0, 1, -5, 10, 256, -128, -100, 45, 6, 3, dw -15,-67, 39, 4, 20, -1668, -32766, 32765, -525, dw 300count equ ($-buffer)/2max dw ?data endsstack segment stack 'stack'db 100 dup ('s')stack endscode segment para 'code'assume cs:code, ds:data, ss:stacksta proc farpush dsxor ax, axpush axmov ax, datamov ds, axlea si, buffermov cx, countdec cxmov ax, [si]chkmax: add si, 2cmp [si], axjle nextmov ax, [si]next: loop chkmaxmov max, axretsta endpcode endsend sta实验报告要求:1.小结汇编语言源程序的编译及连接过程;2.通过debug调试工具查看并记录DS在程序执行中的变化情况3.写出程序调试中出现的问题及解决方法;2.实验内容2①编辑源程序(参考程序见后),建立.ASM文件;②用MASM程序汇编产生.OBJ文件;③用LINK程序产生.EXE文件;④执行 .EXE文件,观察程序运行现象;⑤修改源程序,使输出的数字之间用空格间隔;参考程序:; display “0~9” 100 timesstac segment stack 'stack'db 100 dup ('s')stac endscod segment para 'code'assume cs:cod, ss:stacsta proc farpush dsxor ax, axpush axmov cx, 100mov bl, 0goon: push cxmov ah, 2mov dl, 0dhint 21hmov al, blinc aldaaand al, 0fhmov bl, alor al, 30hmov dl, almov ah, 2int 21hmov dx, 5l1: mov cx, 0ffffhagain: loop againdec dxjnz l1pop cxloop goonretsta endpcod endsend sta3.实验内容3:编程完成以下功能,并上机调试通过。

汇编语言源程序运行步骤和DEBUG的使用

汇编语言源程序运行步骤和DEBUG的使用

汇编语言源程序运行步骤和DEBUG的使用一、实验目的1.熟悉汇编语言源程序书写格式。

2.熟悉汇编语言源程序编辑、汇编、连接、执行步骤。

3.练习DEBUG常用命令的使用。

4.熟悉8086的寄存器。

5.了解程序的执行过程。

二、实验预习要求1、认真阅读预备知识中汇编语言的上机步骤的说明,熟悉汇编程序的建立、汇编、连接、执行、调试的全过程。

2.预习使用DEBUG 检查/修改寄存器内容、查询存储器内容的命令。

3.预习使用DEBUG单步、断点及连续执行程序的命令。

三、实验内容1.编辑以下程序,汇编连接后运行,将输出'HOW ARE YOU?’。

本习题主要目的:熟悉汇编语言源程序的书写格式;熟悉汇编语言源程序的编辑、汇编、连接、运行。

DA TA SEGMENTBUF DB 'HOW ARE YOU?$'DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV DX,OFFSET BUFMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START2.DEBUG 调试以下程序,查看DATA段中定义的数据在内存中的存放方式,并单步执行查看每一语句执行后相关寄存器的内容,并解释为何取该值:DA TA SEGMENT ;(1)DB 34H,12H ;(2)B DW 1234H ;(3)C DD 0 ;(4)D DB -1,15/3 ;(5)E DB '012' ;(6)F DW 'AB','C' ;(7)G DW ? ;(8)H DB 5 DUP(0) ;(9)I DW $-OFFSET H ;(10)DA TA ENDS ;(11)CODE SEGMENT ;(12)ASSUME CS:CODE,DS:DA TA ;(13)START: MOV AX,CODE ;(14)MOV DS,AX ;(15)MOV BX,SEG A ;(16)MOV CX,OFFSET B ;(17)MOV DX,TYPE C ;(18)MOV AH,4CH ;(19)INT 21H ;(20)CODE ENDS ;(21)END START ;(22)3.下面是第1题采用将主程序定义为远程的程序返回DOS的结束方式,将其编辑、连接、运行,熟悉汇编源程序不同的结束方式。

汇编语言编辑、汇编、连接、运行的全过程

汇编语言编辑、汇编、连接、运行的全过程

汇编语⾔编辑、汇编、连接、运⾏的全过程为了理解汇编语⾔的编辑、汇编、连接、运⾏的全过程,我们不使⽤IDE,⽽是分步骤来进⾏:需要⼯具:1. ⽂本编辑器(如果有Notepad++或者UltraEdit就更好了)2. 汇编器(如MASM.exe)3. 连接器(对应的link.exe)为了省略盘符转换,我在电脑的F盘中建⽴了myASM这个⽂件夹,并把Windows系统的cmd.exe复制到了该⽂件夹中,另外,把下载好的MASM.exe和LINK.exe都复制到该⽂件夹中,在myASM下建⽴⼀个⽂本⽂件1.txt, 改其名为1.asm, 在1.asm中输⼊如下程序并保存[plain]1. assume cs : xxx2. xxx segment3.4. mov ax, 25. add ax, ax6. add ax, ax7.8. mov ax, 4c00H9. int 21H10.11. xxx ends12. end点击cmd.exe, 然后输⼊masm, 按enter, 进⼊了masm的界⾯,然后按下图输⼊(有时需要按enter键):在myASM⽂件夹下⽣成了1.obj⽂件盒1.exe⽂件(注意:由于该程序只有代码段,没有栈段,故有no stack segment这个提⽰)。

双击1.exe⽂件后,⿊⾊的框框⼀闪⽽过,这是很正常的。

⽤cmd.exe来运⾏1.exe, 也没有发现什么结果,因为该程序并没有输出操作,所以⾃然也就没有输出结果了。

那要怎么样看结果呢?⽤debug嘛!步骤如下:有两点值得注意:1. u命令表⽰将内存中的机器指令转为汇编指令(⾄于g命令的作⽤,前⾯已经说过了)2. 要输⼊debug 1.exe. 如果输⼊debug 1, 则会出错3. 在没有学会输出操作之前,以上⽅法是查看结果的好⽅法下⾯,我们来对上述程序进⾏解释:1.[cpp]1. xxx segment2. ...3. xxx endssegment和ends(不是end)是⼀对伪指令,⽤来定义⼀个“段”,具体是什么“段”由伪指令assume来指定。

汇编语言部分——4.汇编、连接、调试

汇编语言部分——4.汇编、连接、调试
MASM 下解压、 在DOS下解压、安装、设置 下解压 安装、设置MASM 611 目录拷贝到BIN目录 将LINK.EXE从BINR目录拷贝到 从 目录拷贝到 目录 目录下编辑、 在BIN目录下编辑、汇编、连接 目录下编辑 汇编、 MASM exp41.asm 产生OBJ文件 产生 文件 LINK link exp41; 产生EXE文件 产生 文件 DEBUG 上机调试及验证 课后需要验证的内容 1. 作业定义的数据及内存图的验证 放入数据段定义) (放入数据段定义) 2. 作业编写的指令、寻址结果、标志位的验证 作业编写的指令、寻址结果、 插入到代码段中) (插入到代码段中) 盘构造纯DOS环境(选择项目) 环境( 用U盘构造纯 盘构造纯 环境 选择项目)
计算机组成原理与汇编语言
汇编语言部分) (汇编语言部分)
北航计算机学院

熊桂喜
Tel :82317605,82317634 email:xiongguixi@
第三部分:汇编、连接、 第三部分:汇编、连接、调试
一.典型汇编程序上机的基本过程
1. 2. 3. 4. 编写汇编程序( 用EDIT编写汇编程序(****.asm) 编写汇编程序 ) 汇编形成目标文件(*.obj) 用MASM汇编形成目标文件 汇编形成目标文件 把一个或多个OBJ文件连接形成可执行文件 用LINK把一个或多个 把一个或多个 文件连接形成可执行文件 (*.EXE) 执行或调试
二.用DEBUG调试汇编语言程序 调试汇编语言程序
1. 2. 3. 4. 认识DEBUG的命令 的命令 认识 理解DEBUG下的程序布局及形式 理解 下的程序布局及形式 来查看程序细节: 用DEBUG来查看程序细节:常量、变量、标号、转移 来查看程序细节 常量、变量、标号、 跟踪和执行
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二练习汇编语言源程序的编辑、汇编和连接
一、实验目的
1、熟练使用EDIT编辑软件编辑汇编语言源程序。

2、熟练使用MASM宏汇编软件汇编源程序。

3、熟练使用LINK连接程序生成.EXE文件。

二、实验任务
利用EDIT、MASM、LINK找出下面的源程序中的错误,并得出运行结果。

DATA SEGMENT
A DW5F73H
B DW CD89H
C dw?
Data ends
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AL,A
MOV BX,B
ADD AX,BX
MOV C,AX
MOV AH,4CH
INT21H
CODE ENDS
END START
三、实验设备
PC机一台
四、实验步骤
1、输入源程序。

2、汇编、连接程序,生成.EXE文件,执行文件,检查结果。

3、
4、
5、
6、
实验一的相关知识
以下程序都是在DOS操作系统完成的。

一般情况下MASM、LINK都在一个MASM子目录下。

一、编辑程序(EDIT)
用户在任一目录下都可以输入EDIT,进入编辑环境,输入源程序,并以.ASM的扩展名保存。

输入以下源程序,并以TEST.asm保存。

DATA SEGMENT
A DW5F73H
B DW CD89H
C dw?
Data ends
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AL,A
MOV BX,B
ADD AX,BX
MOV C,AX
MOV AH,4CH
INT21H
CODE ENDS
END START
Test.asm是一个带有两处语法错误的汇编语言源文件。

二、汇编程序(MASM.EXE)
1、汇编程序的主要功能

(5)产生源程序的目标代码文件,供连接程序用;
(6)产生列表文件,给出源程序指令相对应的地址计数器的值和符号表;
2、使用
(1)命令格式(假设MASM子目录在D盘)
D:\>CD MASM1)检查汇编语言源程序,若程序中有不符汇编程序要求的语句,给出错误信息;
(2)利用地址计数器确定被汇编的每条指令的偏移地址;(3)确定各符号的偏移地址,建立符号表;
(4)利用符号表,机器指令表和伪操作表把助记符指令翻译成机器语言指令;
D:\MASM>MASM
出现:
Source(.asm):指定汇编源程序的文件名,缺省的扩展名为.asm。

Object(.obj):指定目标文件名,缺省的目标文件名与源文件名
相同,缺省的扩展名为.obj。

Listing(.lst):指定列表文件名,缺省的扩展名为.lst,缺省情况是不生成列表文件。

Crossref(.crf):指定交叉参考文件名,缺省的扩展名为.crf。

缺省情况是不生成交叉参考文件。

(2)汇编方法
D:\MASM>MASM
Source filename[.asm]:test(输入源文件名,缺省扩展名为.asm)Object filename[test.obj]:(直接回车,[]中为缺省的目标文件名)Source listing[nul.lst]:(直接回车,不生成列表文件)
Cross-reference[nul.crf]:(直接回车,不生成交叉参考文件)test.asm(3):error A2009:Symbol not defined:CD98H test.asm(10):warning A4031:Operand types must match
50928+415568Bytes symbol space free
1Warning Errors
1Severe Errors50928+415568Bytes symbol space free 发现警告或错误后,在EDIT编辑器下将TEST.ASM的错误改正后,重新汇编。

一般情况下程序中是不允许出现警告的,但是如果你确定这个警告对程序没有影响,可以不予修改,但这样有时候是很危险的。

二、连接程序(LINK.EXE)
1、主要功能
(1)找到要连接的所有目标模块,并确定各目标模块的相对段值;
(2)确定各目标模块的浮动地址及外部符号地址;
(3)产生可执行文件(.exe)
2、使用
(1)命令格式
D:\MASM>LINK
Object(.obj):指定目标文件名,缺省的扩展名为.obj。

Runfile(.exe):指定可执行文件名,缺省的文件名与第一个目标文件名相同,缺省的扩展名为.exe。

Mapfile(.map):指定映像文件名,缺省情况是不产生映像文件Library(.lib):指定库文件名,缺省情况是不使用库文件。

(2)举例
D:\MASM>LINK
Object modules[.obj]:test(实际上是对.OBJ文件进行连接)Run file[test.exe]:
List file[nul.map]:
Libraries[.lib]
LINK:warning L4021:no stack segment
(3)运行
生成可执行文件test.exe后,可直接运行。

D:\MASM\TEST
屏幕上什么也没有!只会继续显示DOS提示符。

相关文档
最新文档