练习汇编语言源程序的编辑、汇编和连接
汇编程序编写、编译链接与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语言预处理编译汇编链接【原创版】目录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的使用一、实验目的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.汇编、连接、调试
计算机组成原理与汇编语言
汇编语言部分) (汇编语言部分)
北航计算机学院
熊桂喜
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、熟练使用EDIT编辑软件编辑汇编语言源程序。
2、熟练使用MASM宏汇编软件汇编源程序。
3、熟练使用LINK连接程序生成.EXE文件。
二、实验任务利用EDIT、MASM、LINK找出下面的源程序中的错误,并得出运行结果。
DATA SEGMENTA DW 5F73HB DW CD89HC dw ?Data endsCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AL,AMOV BX,BADD AX,BXMOV C,AXMOV AH,4CHINT 21HCODE ENDSEND START三、实验设备PC机一台四、实验步骤1、输入源程序。
2、汇编、连接程序,生成.EXE文件,执行文件,检查结果。
3、4、5、6、实验一的相关知识以下程序都是在DOS操作系统完成的。
一般情况下MASM、LINK都在一个MASM子目录下。
一、编辑程序(EDIT)用户在任一目录下都可以输入EDIT,进入编辑环境,输入源程序,并以.ASM的扩展名保存。
输入以下源程序,并以TEST.asm保存。
DATA SEGMENTA DW 5F73HB DW CD89HC dw ?Data endsCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AL,AMOV BX,BADD AX,BXMOV C,AXMOV AH,4CHINT 21HCODE ENDSEND STARTTest.asm是一个带有两处语法错误的汇编语言源文件。
二、汇编程序(MASM.EXE)1、汇编程序的主要功能((5)产生源程序的目标代码文件,供连接程序用;(6)产生列表文件,给出源程序指令相对应的地址计数器的值和符号表;2、使用(1)命令格式(假设MASM子目录在D盘)D:\>CD MASM1)检查汇编语言源程序,若程序中有不符汇编程序要求的语句,给出错误信息;(2)利用地址计数器确定被汇编的每条指令的偏移地址;(3)确定各符号的偏移地址,建立符号表;(4)利用符号表,机器指令表和伪操作表把助记符指令翻译成机器语言指令;D:\MASM>MASM出现:Source(.asm):指定汇编源程序的文件名,缺省的扩展名为.asm。
汇编语言_实验三_编程、编译、连接、跟踪
汇编语⾔_实验三_编程、编译、连接、跟踪四、实验结论1. 练习1第⼀步,在记事本中输⼊实验要求中提供的代码,结果如下:将其以⽂件名t1.asm另存为到E:/masm。
第2步,为⽅便后续操作,此处先准备⼀个批处理⽂件:同样将其放⼊E盘masm路径下,重命名为process.bat。
(1)进⼊并配置好DSBox环境,使⽤process t1对t1.asm进⾏编译、连接并运⾏:屏幕上出现36.(2)将修改line 4和line 6中寄存器dl增加的值,发现line 4中写⼊的数值是屏幕上显⽰的第⼀位数字1,line 9中的数值是屏幕上第⼆位数字。
(3)使⽤debug命令对⽣成的t1.exe进⾏调试。
①⾸先,使⽤r命令查看寄存器的值:注意到,此处CX的值是0016H,DS的值为075AH,CS的值为076AH,刚好满⾜CS=DS+10H。
②使⽤d命令查看程序段前缀的前两个字节,发现前两个字节的确是CD 20:3.反汇编t1.exe,查看所得代码,由于CX=0016H,所以此处我们查看从CS开始的0015H个字节的代码:刚好是t1.asm中的内容。
④使⽤t命令和p命令进⾏单步调试直⾄程序结束,观察结果:2. 练习2第⼀步,编写汇编源程序:第⼆步,(1)对源程序进⾏编译、连接、运⾏,运⾏结果如下:看到屏幕出现酒红⾊的36,嗯,这说明我们的程序有好好的编译连接和运⾏了……(等等,说好的err呢?)(2)好吧,我们进继续按照实验要求中将原代码line 7的0433H改为0432H,将line 10中毒的0436H改为0439H,重新进⾏编译、链接、运⾏,得到结果如图:(3)我们继续尝试修改填⼊显存单元中的数值,将源代码中line7的0433h改为0333h, line10 的 0436h改为0336h, 然后重新汇编、连接,并运⾏,结果如下:此时屏幕左上⾓出现了绿⾊的36。
3. 延伸思考与分析(1)在实验⼀中,我们已知地址A0000~BFFFF被⽤来当做显存地址空间,向地址为A0000~BFFFF的内存单元中写⼊数据,就是向显存中写⼊数据,这些数据会被显⽰卡输出到显⽰器上。
实验一__汇编语言程序的编辑与调试
实验一__汇编语言程序的编辑与调试实验一汇编语言程序的编辑与调试【实验目的】练习源程序的编辑、编译、链接和调试。
了解汇编语言的语法规则。
【实验1.1】阅读附录一的内容,根据附录一【例1.1】的步骤,将例程输入并完成编译、链接等工作;按照【例1.1】后面的提示,启动TD并进行各项动态调试,逐步熟悉TD的用法;在实验报告上为源程序增加注释。
【例1.1】显示5行HELLO。
; FILENAMEzHELLO . ASMDATA SEGMENTMESG DB ‘HELLO’DB 0 , 0 , 0 ; ①DATA ENDSCODE SEGMENT USE16ASSUME CS: CODE , DS: DATABEG: MOV AX , DATAMOV DS , AXMOV ES , AX ; ②MOV CX , 5LL1: MOV M ESG+5 , 0DH ; ③MOV MESG+6 , 0AH ; ④MOV MESG+7 , '$' ; ⑤CALL DISPMOV MESG+5 , 0 ; ⑥MOV MESG+6 , 0 ; ⑦MOV MESG+7 , 0 ; ⑧LOOP LL1MOV AH , 4CHINT 21HDISP PROCMOV AH , 9MOV DX , OFFSET MESGINT 21HRETDISP ENDPCODE ENDSEND BEG以上是待调试程序的源文件,该程序执行后,在屏幕上显示5行‘HELLO'。
下面以此为例来介绍调试过程。
1. 调试前的准备工作调用TASM和TLINK生成有调试信息的EXE文件,即C:>TASM HELLO / zi 生成HELLO . OBJC:>TLINK HELLO / v / 3 生成HELLO . EXE2. 启动TD键入:C:>TD HELLO成功启动TD之后,TD进入MODULE显示模式,屏幕上显示HELLO-ASM源程序,一个三角形符号指示出了标号为BEG的那条指令是启动指令。
汇编语言程序的编辑、汇编、连接和调试
Object filename [Filename.OBJ]:目标
文件 Source listing [NUL.LST]:列表文
件 Cross-reference [NUL.CRF]:交叉引
用文件
汇编语言程序的编辑、汇编、连接和调试
Hale Waihona Puke 1.3 连接程序LINK汇编产生的目标程序文件虽然是二进制代码文件,但它还不能直 接运行,须再经过连接程序LINK进行连接,生成一个扩展名为.EXE的 可执行文件。所谓连接过程,就是找到要连接的所有目标模块,将它 们装入内存,进而连接在一起形成一个完整的程序。
微机原理与接口技术
汇编语言程序的编辑、汇编、连接和调试
1.1 源程序编辑器EDIT
用户可以在任意一种编辑程序(EDIT,NOTEPAD等)下,用键盘键入或编辑汇编语言的源程序。此时, 源程序以ASCII码形式存放于内存中。将源文件以.ASM为扩展名存盘后,在磁盘上就建立了一个汇编语言源 程序文件。
微机原理与接口技术
在连接过程中,可生成3个文件,用户可根据需要有选择地建立相 应文件。
1.4 程序的运行和调试
Run File [Filename.EXE]:可执
行文件
List File [NUL.MAP]: 映像文件
经过以上三个步骤后,将可执行文件装入内存,就可以在DOS 下运行此汇编程序了。
Libraries [.LIB]:库文 件
1.2 汇编程序MASM
要使汇编语言源程序在机器上运行,必须先用汇编 程 序 MASM 对 ASM 文 件 进 行 汇 编 , 生 成 一 个 扩 展 名 为.OBJ的目标程序文件。这时,源程序中的指令被汇编成 了计算机可以识别的二进制代码。
汇编语言程序的编辑汇编连接和调试
汇编语言程序的编辑汇编连接和调试汇编语言程序的编辑、汇编、连接和调试汇编语言是一种低级编程语言,用于编写计算机程序。
在进行汇编语言程序的开发过程中,编写程序只是第一步。
为了使程序能够在计算机上正确运行,还需要进行编辑、汇编、连接和调试等步骤。
一、编辑编辑是指使用文本编辑器创建汇编语言程序的过程。
在编辑过程中,需要遵循汇编语言的语法规则,并按照编程需求编写相应的指令和操作码。
在编辑过程中要注意代码的格式化与缩进,以便提高代码的可读性和维护性。
二、汇编汇编是将汇编语言源代码翻译成机器码的过程。
机器码是计算机能够识别和执行的代码形式。
在汇编过程中,需要使用汇编器(Assembler)来完成源代码到机器码的转换。
汇编器会将汇编语言指令翻译成对应的机器码,并生成目标文件。
三、连接连接是将多个目标文件或库文件合并成一个可执行文件的过程。
在编写大型程序时,通常会将程序分成多个模块并分别编译为目标文件。
连接器(Linker)能够将这些目标文件合并,并解析符号引用关系,产生最终的可执行文件。
连接过程中还会进行地址重定位和符号解析等操作,以保证程序的正常执行。
四、调试调试是在程序执行过程中,发现和修复错误的过程。
汇编语言程序往往较为底层,难以直接调试。
因此,在调试过程中,我们需要借助调试器(Debugger)来跟踪程序的执行,查看寄存器状态、内存数据等信息,以便定位和修复问题。
调试工具还可以设置断点、单步执行等操作,帮助我们更好地理解程序的执行过程。
综上所述,汇编语言程序的编辑、汇编、连接和调试是编写汇编程序不可或缺的步骤。
通过严格遵循语法规则,正确编辑汇编源代码,并经过汇编、连接和调试等过程,可以使程序在计算机上正确执行,实现预期的功能。
汇编语言源程序的运行过程
汇编语言源程序的运行过程汇编语言是一种低级别的编程语言,它与计算机硬件直接相关。
它通常被用于编写硬件驱动程序、嵌入式系统和最底层的操作系统等。
下面是汇编语言源程序的运行过程,涵盖了编译、链接、装载和执行等主要步骤。
1.编写源代码:汇编语言程序通常由汇编指令和伪指令组成。
汇编指令是一种与机器指令对应的易于阅读和理解的符号表示方式。
伪指令是一种用于声明和初始化变量、存储常量以及定义程序控制结构的特殊指令。
2.编译:汇编语言源代码需要通过汇编器进行编译,将其转换成机器可执行的目标代码。
汇编器将汇编指令转换成机器码,并生成与每条指令对应的目标代码。
3.链接:汇编语言源程序中可能会引用一些外部的函数或库。
在链接阶段,连接器将目标代码和外部函数的实现链接在一起,形成最终的可执行文件。
链接的目的是解决程序中的符号引用,保证被引用的函数能被正确执行。
4.装载:在执行之前,操作系统需要将可执行文件装载到内存中。
装载器会通过分析可执行文件的结构,并将代码、数据和栈等部分装入合适的内存位置,以便程序能够正常运行。
5.执行:装载后,汇编语言程序开始执行。
CPU从程序的入口地址开始执行第一条指令。
指令由操作码和操作数组成,操作码用于指示要执行的操作类型,操作数则提供了相关的数据。
依次执行每条指令,程序按照预定的算法和逻辑运行。
在执行过程中,程序可能需要和外部设备或其他软件交互,具体的输入和输出操作会通过中断和系统调用等机制进行。
中断可以触发特定的处理程序,用于处理硬件设备的输入输出或异常情况的处理。
系统调用允许程序通过操作系统提供的功能来进行输入输出、内存管理和进程调度等操作。
总的来说,汇编语言源程序的运行过程包括编写源代码、编译、链接、装载和执行。
这个过程关系到程序从开发到运行的相关步骤,每个步骤都需要严格的处理,以确保程序能够正确运行,并与外部环境进行良好的交互。
《汇编语言》实验三——编程、编译、连接、跟踪
《汇编语⾔》实验三——编程、编译、连接、跟踪实验任务⼀:将下⾯的程序保存为t1.asm⽂件,将其⽣成可执⾏⽂件t1.exe。
⽤记事本编辑代码,保存为t1.asm:编译、连接,⽣成可执⾏⽂件:运⾏程序:得到输出结果为06下⾯研究修改line4和line9中寄存器dl的值,对结果产⽣的影响。
为简化编译、连接的过程,决定采⽤批处理⽂件的形式来完成这个过程:⽣成⼀个名为m_l.bat的批处理⽂件。
修改:line4的3—>4,line9的6—>8:编译、连接、执⾏:得到输出结果08⽤debug对t1.exe调试:⽤r命令查看各寄存器的值:发现cs的值为076A,ds的值为075A,满⾜(cs)=(ds)+10H查看psp的内容:可以看到,psp的头两个字节的确是CD 20使⽤u命令反汇编,观察源代码:单步调试:实验任务⼆:将下⾯的程序保存为t2.asm⽂件,将其⽣成可执⾏⽂件t2.exe⽤记事本编辑代码,保存为t2.asm:编译、连接,⽣成可执⾏⽂件:运⾏结果:在屏幕的左上⽅出现红⾊数值36下⾯研究修改line7和line10的部分数据对结果产⽣的影响①line4的 0433h—>0432h, line10的 0436h—>0439h编译、连接、运⾏:运⾏结果:在屏幕的左上⽅出现红⾊数值29①line4的 0433h—>0333h, line10的 0436h—>0336h编译、连接、运⾏:运⾏结果:在屏幕的左上⽅出现蓝⾊数值36从以上3组结果可以看出,line7控制第⼀个字符的输出,line10控制第⼆个字符的输出。
⼆者[bx]的⾼字节决定了颜⾊,低字节控制显⽰的字符。
汇编语言程序设计实验2汇编源程序编写与汇编、调试
汇编语⾔程序设计实验2汇编源程序编写与汇编、调试汇编语⾔程序设计实验2 汇编源程序编写与汇编、调试⼀、实验⽬的1. 理解并掌握汇编源程序组成与结构2. 掌握汇编语⾔源程序编写→汇编→链接→调试的⼯具和⽅法3. 理解汇编源程序中地址表⽰、段寄存器的⽤法4. 理解和掌握寄存器间接寻址⽅式[bx]5. 通过汇编指令loop的使⽤理解编程语⾔中循环的本质⼆、实验内容及结果(⼀)实验任务⼀使⽤任意⼀款⽂本编辑器,编写8086汇编源程序ex1.asm。
源代码如下:assume cs:codecode segmentmov ax, 0b810hmov ds, axmov byte ptr ds:[0], 1mov byte ptr ds:[1], 1mov byte ptr ds:[2], 2mov byte ptr ds:[3], 2mov byte ptr ds:[4], 3mov byte ptr ds:[5], 3mov byte ptr ds:[6], 4mov byte ptr ds:[7], 4mov ah, 4chint 21hcode endsend要求:使⽤8086汇编程序编写、汇编、链接、运⾏、调试⽅法,对ex1.asm进⾏汇编、链接、运⾏,使⽤debug⼯具调试可执⾏⽂件。
使⽤masm、link对ex1.asm进⾏汇编、链接,得到可执⾏⽂件ex1.exe,运⾏并观察结果。
使⽤debug⼯具对程序进⾏调试使⽤debug加载可执⾏⽂件ex1.exe后,使⽤d命令查看程序段前缀PSP所占的256个字节。
结合可执⾏⽂件中寄存器CX的值,使⽤u命令对ex1.exe进⾏精确反汇编使⽤g命令执⾏到程序退出执⾏之前(即源码⽂件中line16之前),观察结果。
1、⾸先使⽤masm对*.asm⽂件进⾏编译,⽣成包含机器代码的⽬标⽂件(*.obj)编译后没有问题(截图中能看到提⽰说:0 Warning Errors和0 Severe Errors)这时候再返回到⽂件夹中就会发现多了⼀个.obj⽂件对 *.obj ⽬标⽂件进⾏连接,得到可执⾏⽂件(.exe⽂件)。
8086汇编语言学习(四)8086汇编程序的编译与链接
8086汇编语⾔学习(四)8086汇编程序的编译与链接1、8086汇编源程序从编写到执⾏的过程 前⾯介绍过通过debug模式来进⾏汇编程序的编写和调试。
但是随着深⼊学习,所编写的汇编程序会越来越复杂,⽽通过debug的A命令去逐条编写汇编指令是⾮常低效的。
因此,这⾥将要介绍8086汇编源程序这⼀概念,使得我们可以通过⽂本的⽅式编写汇编程序,并通过⼀系列的措施将其转化为最终的⼆进制可执⾏程序。
⼀个汇编源程序从编写到执⾏⼤概可以分为⼏个阶段: 1. 开发者编写⽂本形式的汇编源程序 2. 对汇编源程序进⾏编译并⽣成⽬标⽂件、对⽬标⽂件进⾏链接并⽣成可执⾏⽂件 3. 运⾏可执⾏⽂件下⾯通过⼀个简单例⼦来详细说明(以windows操作系统下的masm5环境举例):1. 编写汇编源程序 通过系统⾃带的记事本或者更⾼级的⽂本编辑器编写⽂本形式的汇编源程序,将其命名为demo.asm,程序内容如下:assume cs:codesgcodesg segmentmov ax,0123Hmov bx,0456Hadd ax,bxadd ax,axmov ax,4c00Hint 21H ;中断退出程序codesg endsend2. 对汇编源程序进⾏编译、链接编译: 通过命令⾏运⾏masm.exe,先让⽤户输⼊需要编译的汇编源⽂件的本地⽂件地址(Source filename :)。
如果⽂件在当前⼯作路径下可以仅输⼊⽂件名(例如 demo.asm),否则就需要输⼊绝对地址路径(例如 c:\MASM\ASM\demo.asm)。
另外,如果源程序⽂件的默认后缀拓展名为[.ASM],如果是.txt之类的⽂件,则需要输⼊全名(例如 c:\MASM\ASM\demo.txt)。
接着会让⽤户输⼊所⽣成的.obj⽬标⽂件的存放路径以及名称(Object filename :),例如 c:\MASM\ASM\demo.obj。
后⾯的Source listing和Cross-reference能够让masm编译器⽣成编译过程中的中间结果⽂件,这⾥可以直接回车跳过,不去让编译器⽣成。
汇编语言源程序的编辑汇编连接的方法
汇编语言源程序的编辑汇编连接的方法1. 使用正确的扩展名:源代码文件应该使用与汇编器兼容的扩展名,如.asm或.s。
2.引入必要的库:根据程序的需求,可能需要引入一些预编译库,在源代码中使用相应的指令或宏。
3.编写注释:在源代码中添加注释,以便于其他人阅读和理解代码的功能和逻辑。
二、汇编源程序:汇编是将源代码转换为机器码的过程。
在进行汇编之前,需要使用专门的汇编器将源程序转换为可执行文件。
最常用的汇编器是GNU Assembler (GAS),它通常与GCC工具链一起使用。
下面是执行汇编的步骤:1. 打开命令行界面:需要进入一个命令行终端,如Windows的CMD或Linux的终端。
2. 切换工作目录:使用cd命令在命令行中进入源代码所在的目录。
例如,如果源代码文件位于C:\Programs目录中,可以使用以下命令:cd C:\Programs。
3. 使用汇编器:执行汇编器的命令,将源代码转换为目标文件。
以下是一个示例命令:gcc -c program.asm -o program.o。
这个命令使用GCC编译器调用GNU Assembler (GAS)进行汇编,并将输出的目标文件保存为program.o。
在进行汇编时,可能需要注意以下几点:1.确保安装了汇编器:确保系统中安装了汇编器,如GAS,并且其可执行文件所在的目录已添加到系统的环境变量中。
2.处理错误和警告:在进行汇编时,可能会出现错误和警告。
需要仔细阅读汇编器输出的信息,并进行相应的修正。
三、连接目标文件:连接是将目标文件与所需的库文件合并为一个可执行文件的过程。
在连接之前,需要使用链接器将目标文件与库文件进行关联。
最常用的链接器是GNU链接器 (ld),它也通常与GCC工具链一起使用。
以下是执行连接的步骤:1. 打开命令行界面:需要进入一个命令行终端,如Windows的CMD或Linux的终端。
2. 切换工作目录:使用cd命令在命令行中进入目标文件所在的目录。
汇编语言源程序的编辑、汇编、连接的方法
格式:<起始地址>[驱动器号]<起始扇区><扇区数>
格式:[起始地址]
功能:格式把指定地址开始地内容数据写到磁盘上指定地扇区中.
格式将起始地址地×个字节内容存放到由命令指定地文件中.在格式地命令之前,除用命令指定存盘地文件名外,还必须将要写地字节数用命令送入和中.GMsIa。
()退出命令
例如:;表示从开始显示个单元内容
;表示显示单元地内容
说明:在中,地址表示方式有如下形式:
段寄存器名:相对地址,如:
段基值:偏移地址(相对地址),如:
()修改存储单元命令
格式:[起始地址] [内容表]
格式:[地址]
功能:格式按内容表地内容修改从起始地址开始地多个存储单元内容,即用内容表指定地内容来代替存储单元当前内容.y6v3A。
例如:—:''
表示从为起始单元地连续五个字节单元内容依次被修改为
''、''、''、、.
格式是逐个修改指定地址单元地当前内容.
如:—:
:
其中单元原来地值是,为输入地修改值.若只修改一个单元地内容,这时按回车键即可;若还想继续修改下一个单元内容,此时应按空格键,就显示下一个单元地内容,需修改就键入新地内容,不修改再按空格跳过,如此重复直到修改完毕,按回车键返回“”提示符.如果在修改过程中,将空格键换成按“”键,则表示可以修改前一个单元地内容.M2ub6。
汇编语言源程序地编辑、汇编、连接地方法
一、编辑源程序
汇编语言源程序:用汇编语句编写地解决应用问题地程序.
汇编程序:将汇编语言源程序翻译成机器语言程序地系统.
汇编:将汇编语言程序翻译成机器语言程序地过程.
实验一 汇编程序和连接程序的使用
实验一汇编程序和连接程序的使用一、实验目的熟悉汇编语言的上机环境,学习EDIT,MASM,LINK程序的使用,掌握建立、汇编、链接、运行汇编语言程序的过程。
二、示例试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。
用串比较功能来完成程序所要求的功能。
上机步骤如下:1、调用程序建立汇编语言源程序.ASM建立好的源文件以EX_1.ASM为文件名存盘DATA SEGMENTSTRING1 DB 'Visual C++ 'STRING2 DB 'Visual Basic'COUNT EQU $-STRING2MESS1 DB 'MATCH!’,13,10,’$'MESS2 DB 'NO MATCH!’,13,10,’$'DATA ENDScode segmentassume cs:code,ds:data,es:datamain proc farstart:push dssub ax,axpush axmov ax,datamov ds,axmov es,ax;main programmov cx,countlea si,string1lea di,string2cldrepz cmpsbjz mes1mov dx,offset mess2jmp disp0mes1:mov dx,offset mess1disp0: mov ah,9int 21hexit: retmain endpcode endsend start2、用汇编程序MASM对源文件汇编产生目标文件.obj键入命令 masm ex_1;如汇编指示出错则需重新调用EDIT程序修改错误,直到汇编通过产生.obj文件为止。
3、用连接程序LINK对目标文件.obj进行连接,产生可执行文件.EXE键入命令 link ex_1;4、运行程序键入命令 ex_1;屏幕显示 N0 MATCH!为了调试程序的另一部分,可修改程序数据段两个字符串的内容,使它们相同。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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提示符。