微机原理课程,文件名怎么显示后缀

后缀 4
微机原理课程 ——汇编语言程序的编辑、汇编、连接和调试 西安电子科技大学探测制导系 2006-5-
5 内容提要 ‹编写汇编语言程序的五个重要步骤‹编写源程序‹汇编过程‹连接过程‹汇编语言编程过程‹DEBUG主要功能‹DEBUG命令‹程序设计举例‹结束语 2006-5-
5 编写汇编语言程序的五个重要步骤
1.编写源程序,如L1.ASM2.汇编源程序,得到目标代码,L1.OBJ3.目标代码文件的连接,生成可执行文件 L1.EXE4.对EXE文件进行调试
5.执行程序并输出结果 2006-5-
5 编写源程序 可利用任一种编辑器编写,如EDIT,CCED,NOTEPAD(WINDOWS) ‹注意:源程序名的扩展名必须是.ASM 2006-5-
5 汇编过程 利用MASM对源程序进行汇编,找出语法错误。
汇编后可得到:‹目标文件(.OBJ)‹列表文件(.LST)‹交叉索引文件(.REF) 2006-5-
5 汇编常用命令格式
(1)MASM[d:][path]Source;
(2)MASM[d:][path]Source,Object,list,cref 注意:行末的分号表示不再提问.各个文件名可不指定,这时取默认文件名. 2006-5-
5 汇编命令格式举例
(1)MASMTEST;生成TEST.OBJ
(2)MASMTEST,TEST1,TEST2,TEST3生成TEST1.OBJ,TEST2.LST,TEST3.CRF
(3)MASMTEST,,NUL,TEST;生成TEST.OBJ,TEST.CRF 2006-5-
5 连接过程 利用LINK可将.OBJ文件连接成可执行文件.连接后可得到:‹可执行文件(.EXE)‹内存分配文件(.MAP) 2006-5-
5 连接命令格式
(1)LINKTESTRunFile[TEST.EXE]ListFile[NUL.MAP]Libraries[.LIB]
(2)LINKTEST; 2006-5-
5 汇编语言编程过程 源程序TEST.ASMMASM汇编 目标文件TEST.OBJLINK连接修改 可执行文件TEST.EXEDEBUG调试 2006-5-
5 DEBUG主要功能
(1)显示、修改寄存器和存储单元的内容
(2)按指定地址运行程序
(3)设置断点,使程序分段执行
(4)反汇编目的代码
(5)单步执行
(6)直接输入汇编语言指令
(7)读/写磁盘扇区
(8)读/写文件 2006-5-
5 DEBUG命令目录 1启动DEBUG2退出DEBUG3显示并修改寄存器内容4显示并修改PSW寄存器内容5显示并修改内存单元内容 6反汇编目标代码7设置断点并启动执行8单步执行9直接输入汇编语言指令 2006-5-
5 1启动DEBUG ‹DEBUG[d:][path]TEST.EXE加载TEST.EXE,并进入DEBUG状态 ‹DEBUG直接进入DEBUG状态 2006-5-
5 2退出DEBUG 在DEBUG状态(-)下,输入‹Q 2006-5-
5 3显示并修改寄存器内容 ‹
R 显示所有寄存器的内容 ‹RAX AX1010:821A显示并修改AX寄存器内容 2006-5-
5 4显示并修改PSW寄存器内容 ‹RFOVUPDIPLZRNAPENC-NVPONZ 含义溢出(OF)方向(DF)中断(IF)符号(SF) 10OVNVDNUPEIDINGPL 含义零(ZF)半进位(AF)偶标志(PF)进位(CF) 10ZRNZACNAPEPOCYNC 2006-5-
5 5显示并修改内存单元内容 2006-5-
5 ‹DSAddr:Offset从指定地址开始显示128个Bytes ‹DSAddr:Offset1Offset2从地址1显示到地址
2 ‹ESAddr:Offset从地址1开始一个一个字节显示,并可进行修改‹ESAddr:Offset<内容>直接修改从地址1开始的内存单元 ‹FSaddr:Offset1Offset2<1Byte>以指定的一个字节填入地址1到地址2的内存区域‹F地址L长度<1Byte>以指定的一个字节填入地址开始指定长度的内存 区域 6反汇编目标代码 ‹U从当前地址(CS:IP或上次地址)开始反汇32个Bytes ‹U地址从指定地址开始反汇编32个Bytes‹U地址1地址2从地址1反汇编到地址2 2006-5-
5 7设置断点并启动执行 ‹G从当前地址(CS:IP)开始执行,直到程序结束 ‹G地址从当前地址(CS:IP)开始执行,暂停于断点(地址) ‹G=地址从指定地址开始执行,直到程序结束 ‹G=地址
1,地址2从地址1开始执行,暂停于断点(地址2) 2006-5-
5 8单步执行 ‹T从当前地址执行一条指令 2006-5-
5 9直接输入汇编语言指令 ‹A从当前地址开始输入汇编语言指令‹A地址从指定地址开始输入汇编语言指令 2006-5-
5 程序设计举例 ‹例1:简单例子(完整结构)‹例2:求字符串长度 2006-5-
5 例1:简单例子(完整结构) 求一个数的绝对值VARY=abs(VARX) 源程序文件名为EXP1.ASM ;Obtaintheabsolutevalueofx;Date:1997.10.7 STACK TOPSTACKDATAVARXVARYDATA SEGMENTSTACKDW100HDUP(?
)LABELWORDENDSSEGMENTDB85HDB?
ENDS 2006-5-
5 例1:简单例子(完整结构)续 CODESEGMENTASSUMECS:CODE,DS:DATAASSUMEES:DATA,SS:STACK START:MOVAX,DATAMOVDS,AXMOVES,AXMOVAX,STACKMOVSS,AXLEASP,TOP MOVAL,VARXANDAL,ALJNSDONENEGALDONE:MOVVARY,AL MOVAH,4CHMOVAL,0INT21HCODEENDSENDSTART ;ReturntoDOS 2006-5-
5 例1:汇编和连接 ‹汇编MASMEXP1;得到EXP1.OBJ ‹连接LINKEXP1;得到EXP1.EXE 2006-5-
5 如果有语法错误,应修改源程序 连接后得到EXE文件并不是说程序没错!
调试 例1:调试(DEBUG)StartHere!
2006-5-
5 DEBUGEXP1.EXE -
U 12BC:0000B8BB12MOV 12BC:00038ED8 MOV 12BC:00058EC0 MOV 12BC:0007B89B12MOV 12BC:000A8ED0 MOV 12BC:000C8D260002LEA 12BC:0010A00000MOV 12BC:001322C0 AND 12BC:00157902JNS 12BC:0017F6D8 NEG 12BC:0019A20100MOV 12BC:001CB44C MOV 12BC:001EB000MOV AX,12BBDS,AXES,AXAX,129BSS,AXSP,[0200]AL,[0000]AL,AL0019AL[0001],ALAH,4C AL,00 断点断点单步单步 2006-5-
5 -D00F128B:0000CD2000A0009AF0FE-1DF04F03F00B8A03.........O..… -G10 AX=129BBX=0000CX=0232DX=0000SP=0200BP=0000SI=0000DI=0000 DS=12BBES=12BBSS=129BCS=12BCIP=0010NVUPEIPLNZNAPONC 12BC:0010A00000MOVAL,[0000] DS:0000=85 -D00F12BB:00008500000000000000-0000000000000000................ -G15 AX=1285BX=0000CX=0232DX=0000SP=0200BP=0000SI=0000DI=0000 DS=12BBES=12BBSS=129BCS=12BCIP=0015NVUPEINGNZNAPONC 12BC:00157902 JNS 0019 -
T AX=1285BX=0000CX=0232DX=0000SP=0200BP=0000SI=0000DI=0000 DS=12BBES=12BBSS=129BCS=12BCIP=0017NVUPEINGNZNAPONC 12BC:0017F6D8 NEG AL -
T AX=127BBX=0000CX=0232DX=0000SP=0200BP=0000SI=0000DI=0000 DS=12BBES=12BBSS=129BCS=12BCIP=0019NVUPEIPLNZACPECY 12BC:0019A20100MOV[0001],AL DS:0001=00 -
G Programterminatednormally -
Q 程序正常结束 例2:求字符串长度 要求滤去前置空格,字符串以‘#’结束. 例如字符串为 BUFDB'ABC1234512772end#ARE' ;LENGTH=19=13H 结果放在 L1DW?
编程 2006-5-
5 例2汇编语言程序 ;Obtainthelengthofastringwithleadingspace;Programmingdate:1997.10.7STACKSEGMENTSTACK DW100HDUP(?
)TOPLABELWORDSTACKENDSDATASEGMENTL1DW?
BUFDB'ABC1234512772end#ARE' ;LENGTH=19=13HDATAENDS 2006-5-
5 续 CODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK START:MOVAX,DATAMOVDS,AXMOVES,AXMOVAX,STACKMOVSS,AXLEASP,TOP 2006-5-
5 2006-5-
5 ;FindtheleadingspaceLEASI,BUF-1MOVCX,0MOVAL,'' LP1:INCSICMPAL,[SI]LOOPZLP1 ;Locatethespecialcharacter'#'DECSIXORBX,BXMOVAL,'#' LP2:INCSIINCBXCMPAL,[SI]LOOPNZLP2DECBX ;Savetheresult(inBX)MOVL1,BX MOVAH,4CHMOVAL,0INT21HCODEENDSENDSTART ;ReturntoDOS 续汇编与连接 例2:汇编和连接 ‹汇编MASMEXP2;得到EXP2.OBJ ‹连接LINKEXP2;得到EXP2.EXE 2006-5-
5 如果有语法错误,应修改源程序 连接后得到EXE文件并不是说程序没错!
调试 例1:调试(DEBUG) 2006-5-
5 DEBUGEXP2.EXE -
U 12BD:0000B8BB12MOVAX,12BB 12BD:00038ED8MOVDS,AX 12BD:00058EC0MOVES,AX 12BD:0007B89B12MOVAX,129B 12BD:000A8ED0MOVSS,AX 12BD:000C8D260002LEASP,[0200] 12BD:00108D360100LEASI,[0001] 12BD:0014B90000MOVCX,0000 12BD:0017B020 MOVAL,20 12BD:001946 INCSI 12BD:001A3A04 CMPAL,[SI] 12BD:001CE1FBLOOPZ0019 12BD:001E4E DECSI 12BD:001F33DBXORBX,BX StartHere!
StepInto -G10 AX=129BBX=0000CX=0254DX=0000SP=0200BP=0000SI=0000DI=0000 DS=12BBES=12BBSS=129BCS=12BDIP=0010NVUPEIPLNZNAPONC 12BD:00108D360100LEASI,[0001] DS:0001=2000 -D01F12BB:00000000202020414243-3132333435313220..ABC1234512 12BB:00102037373220656E64-2341524500000000772end#ARE.... 第一个非空格字符位置 -G1E AX=1220BX=0000CX=FFFCDX=0000SP=0200BP=0000SI=0005DI=0000 DS=12BBES=12BBSS=129BCS=12BDIP=001ENVUPEINGNZACPOCY 12BD:001E4E DEC SI L+
1 ‘#’字符位置 -G29 AX=1223BX=0014CX=FFE8DX=0000SP=0200BP=0000SI=0018DI=0000 DS=12BBES=12BBSS=129BCS=12BDIP=0029NVUPEIPLZRNAPENC 12BD:00294B DEC BX 2006-5-
5 字符串长度
L -
T AX=1223BX=0013CX=FFE8DX=0000SP=0200BP=0000SI=0018DI=0000 DS=12BBES=12BBSS=129BCS=12BDIP=002ANVUPEIPLNZNAPONC 12BD:002A891E0000MOV[0000],BX DS:0000=0000 -
T AX=1223BX=0013CX=FFE8DX=0000SP=0200BP=0000SI=0018DI=0000 DS=12BBES=12BBSS=129BCS=12BDIP=002ENVUPEIPLNZNAPONC 12BD:002EB44C MOV AH,4C -D01F12BB:00001300202020414243-3132333435313220..ABC123451212BB:00102037373220656E64-2341524500000000772end#ARE.... -GProgramterminatednormally -
Q 2006-5-
5 结束语
1.编写源程序
2.汇编源程序
3.连接目标程序
4.对EXE文件进行调试
5.执行程序并输出结果 别忘了 2006-5-
5 编写说明文件 Seeyounexttime

标签: #文件 #单位 #文字 #机器人 #使用率 #卷轴 #后缀名 #文件夹