汇编语言实验.doc_第1页
汇编语言实验.doc_第2页
汇编语言实验.doc_第3页
汇编语言实验.doc_第4页
汇编语言实验.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一 DEBUG命令实验一实验目的: 掌握DEBUG 的基本命令及其功能二实验内容:DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。1、DEBUG的主要命令(1) 汇编命令A,格式为:-A地址;该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。例如:-a136B:0100 mov ax,100136B:0103 mov bx,200136B:0106 mov cx,300136B:0109 mov dx,400136B:010C-(2) 反汇编命令U,有两种格式:1)-U地址该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。例如:-u2)-U范围该命令对指定范围的内存单元进行反汇编,例如:(3) 运行命令G,格式为:-G =地址1地址2地址3。其中地址1规定了运行起始地址,后面的若干地址均为断点地址。例如:(4) 追踪命令T,有两种格式:1)逐条指令追踪:-T=地址;该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。2)多条指令追踪:-T=地址值,该命令从指定地址起执行n条命令后停下来,n由值确定。 (5) 显示内存单元内容的命令D,格式为:-D地址或-D范围(6) 修改内存单元内容的命令E,它有两种格式:1)用给定的内容代替指定范围的单元内容:-E地址 内容表 例如:-E 2000:0100 F3 “XYZ” 8D其中F3,“X”“Y”“Z”和8D各占一个字节,用这五个字节代替原内存单元049e:0005到0008的内容,“X”“Y”“Z”将分别按它们的ASCII码值代入。2)逐个单元相继地修改:-E地址例如:此命令是将原5号单元的内容f3改为8989是程序员键入的。(7) 检查和修改寄存器内容的命令R,它有三种方式:1)显示CPU内部所有寄存器内容和标志位状态;格式为:-RR命令显示中标志位状态的含义如下表所示:标 志 名置 位复 位溢出Overflow(是/否)OVNV方向Direction(减量/增量)DNUP中断Interrupt(允许/屏蔽)EIDI符号Sign(负/正)NGPL零Zero(是/否)ZRNZ辅助进位Auxiliary Carry(是/否)ACNA奇偶Parity(偶/奇)PEPO进位Carry(是/否)CYNC2)显示和修改某个指定寄存器内容,格式为:-R 寄存器名例如打入:-R AX表示AX当前内容为F1F4,此时若不对其作修改,可按ENTER键,否则,打入修改后内容,如:-R BXBX 0369:059F则BX内容由0369改为059F3)显示和修改标志位状态,命令格式为:-RF系统将给出响应,如OV DN EI NG ZR AC PE CY-这时若不作修改可按ENTER键,否则在“-”号之后键入修改值,键入顺序任意。如OV DN EI NG ZR AC PE CY-PONZDINV三 、实验任务1 参照附录1,掌握DEBUG程序的各种命令,重点是命令R,D ,A,U,T,P,G命令的使用。2 用命令A汇编下列指令,判断指令正误并说明原因。(1) ROR AX,8(2) LEA DI,AX(3) MOV DS,2010(4) PUSH AL(5) OUT 900,AL(6) MOV BX,03 用命令查看8086/8088 CPU在开机后执行的第一条指令。4 用命令D查看DS:20022F和F000:20022F两内存块内容,用命令F将字符“A”分别填入这两个内存块,比较填入前后结果,了解可读写内存RAM和只读内存ROM的区别。5 用A命令汇编一条INT 1C指令,用命令T单步执行该指令,比较指令执行前后CS和IP、堆栈指针SP及堆栈内容变化情况,了解什么是中断向量表,中断向量和中断子程,掌握中断指令的执行过程。6 利用T,P,G命令,执行下列指令段,注意它们的不同之处。(1) MOV DI,300MOV SI,400MOV CX,3CLDREP MOVSBINT 3(2) MOV AH,2MOV DL,41INT 21INT 3(3) 先在CS:200处汇编一条RET指令,再在CS:100处汇编。MOV BX,200CALL BXINT 3 然后从MOV BX,200处开始执行。实验三 分支程序实验一、实验目的 1)掌握分支程序的设计方法。 2)掌握利用DEBUG修改参数、检查结果的方法。 3)掌握汇编语言源程序的编辑、汇编、连接及调试过程。 二、实验内容 1)编写一个程序,显示AL寄存器中的两位十六进制数 2)编写一个程序,判别键盘上输入的字符;若是0-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。 1)显示AL中两位十六进制数程序: ;DISPHEX.ASM CODE SEGMENT ASSUME CS:CODE START: MOV AL,3EH 0011 1110MOV BL,AL MOV DL,AL MOV CL,4 SHR DL,CL 逻辑右移4位,dl= 0000 0011CMP DL,9 比较JBE NEXT1 小于等于ADD DL,7 NEXT1: ADD DL,30H 0000 0011+0011 0000 dl=33hMOV AH,2 ah=0000 0010INT 21H ;显示高位ASCII码 MOV DL,BL AND DL,0FH 0ehCMP DL,9 JBE NEXT2 ADD DL,7 NEXT2: ADD DL,30H MOV AH,2 INT 21H ;显示低位ASCII码 MOV AH,4CH INT 21H CODE ENDS ;返回DOS END START 2)显示键入字符程序 ;DISPKEY.ASM CODE SEGMENT ASSUME CS:CODE START: MOV AH,1 ;1号功能调用INT 21H ;等待键入字符,送AL CMP AL,0DH ;是否是回车符? JZ DONE ;是则转DONE退出程序 CMP AL,0 JA NEXT CMP AL,9 JB CHARUP MOV DL,AL MOV AH,2 INT 21H ;显示09JMP START CHARUP: CMP AL,41H JA NEXT CMP AL,5AH JB CHRDN DISPC: MOV DL,C MOV AH,2 INT 21H NEXT: JMP START CHRDN: CMP AL,61H JB NEXT CMP AL,7AH JA NEXT JMP DISPC DONE: MOV AH,4CH INT 21H ;返回DOSCODE: ENDS END START 首先运行程序:对程序进行但不执行,了解程序的运行过程:程序流图:实验四 循环程序实验一、实验目的: 1)掌握循环程序的设计方法 2)进一步熟悉利用DEBUG程序修改参数的方法,并检查和验证结果的正确性。 3)学会针对不同的问题,选用不同的组织循环的方法。 二、实验内容 1)将字符串STRN(以“$”结尾)中的每一个字符均加上偶校验位,并统计有多少个字符因含有奇数个“1”而加上了校验位。统计结果存于N单元中。 2)存储单元DAT1及DAT2中各有10字节的二进制数,高位字节放在高位地址中。试编写一程序将这两个数据相加,结果存放在从DAT3开始的单元中。 1)偶校验程序清单: ;EX56.ASM DESG SEGMENT STRN DB ASCDEfghijkLMNOPQuvw,$ N DB ? DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEG MOV DS, AX LEA SI, STRN MOV DL, 0 AGAIN: MOV AL, SI CMP AL, $ JE DONE TEST AL, 0FFH JPE NEXT OR AL, 80H MOV SI, AL INC DL NEXT: INC SI JMP AGAIN DONE: MOV N, DL MOV AH, 4CH INT 21H CSEG ENDS END START ;以上是条件控制的循环。因为事先不知道字符串STRN共有多少字符,故采用条件控制的循环程序实现。 可以看出,有十个字符进行了偶校验2)加法程序清单: ;ADDHEX.ASM CODE SEGMENT ASSUME CS: CSEG, DS: DSEG START: MOV AX, CS MOV DS, AX LEA SI, DAT1 LEA DI, DAT2 LEA BX, DAT3 MOV CX, 10 XOR AL, AL ;0CF AGAIN: MOV AL, SI ADC AL, DI MOV BX, AL INC SI INC DI INC BX LOOP AGAIN MOV AH, 4CH INT 21H DAT1 DB 70H, 80H, 90H, A0H, A1H, A2H, A3H DB 74H, 65H, 56H DAT2 DB 45H, 67H, 89H, 1AH, 2BH, 3CH DB 4DH, 5EH, 6FH, 04H DAT3 DB 10 DUP(?) CODE ENDS END START ;本程序中,DS及CS同处一个逻辑段CODE中,所以,应将CS值送至DS中。 相当于计算实验五 子程序实验(1)一、实验目的 1)掌握主程序与子程序之间的调用关系及调用方法。 2)掌握子程序调用过程中近程调用与远程调用的区别。 3)掌握通过堆栈转送参数的方法。 二、实验内容 1)将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。在转换过程中,通过子程序DISP实现显示。 2)编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符b的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。 1)码型转换程序清单: ;CONV.ASMDATA SEGMENT BUF DB 0ABH,0CDH,0DEH,01H,02H,03H DB 3AH,4BH,5CH,6FH DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,10 LEA BX,BUF AGAIN: MOV AL, BX CALL HEXASC INC BX LOOP AGAIN MOV AH,4CH INT 21H HEXASC PROC NEAR MOV DL,AL PUSH CX MOV CL,4 SHR DL,CL POP CX CALL DISP ;显示高位HEX数 MOV DL,AL AND DL,0FH CALL DISP ;显示低位HEX数RET HEXASC ENDP DISP PROP CMP DL,9 JBE NEXT ADD DL,7 NEXT: ADD DL,30H ;将一位HEX数转为ASCII码MOV AH,2 INT 21H ;显示 RET DISP ENDP CODE ENDS END START 2)统计并显示某键入字符的个数的程序: :COUNTER.ASM DATA SEGMENT CHAR DB b BUF DB 50H, ? 50H DUP(?) DATA ENDS MCODE SEGMENT ASSUME CS: MCODE, DS: DATA START: MOV AX,DATA MOV DS,AX LEA DX,BUF MOV AH,9 INT 21H LEA SI BUF MOV CL, SI+1 MOV CH, 0 ;CX中为字符串长度 INC SI INC SI ;SI指向串首址TABLE MOV AL,CHAR MOV AH,0 ;AX中为待查字符 PUSH SI PUSH CX PUSH AX ; 参数送堆栈 CALL CHECK POP AX ;统计个数在AL中 MOV DL,CHAR MOV AH,2 INT 21H ;显示待检字符MOV DL,AL AND DL, 0FH CMP DL,9 JBE NEXT ADD DL,7 NEXT: ADD DL,30H MOV AH,2 INT 21H ;显示统计个数 MOV AH,4CH INT 21H MCODE ENDS SCODE SEGMENT ASSUME CS:SCODE CHECK PROC FAR PUSH BP MOV BP,SP MOV SI,BP+10 MOV CX,BP+8 MOV AX,BP+6 XOR AH,AH AGAIN: CMP AL,SI JNE NEXT1 INC AH NEXT1: INC SI LOOP AGAIN MOV AL,AH MOV BP+10,AX POP BP RET .4CHECK ENDP END START 实验六 子程序实验(2)本实验目的在于使读者掌握模块间调用子程序的编写方法。一、实验目的(1)了解多模块程序设计方法。(2)学会使用PUBLIC和EXTRN伪指令解决模块间的符号(如变量名、标号等)通信题。二、实验内容(1)编写一个子程序,将主程序敲定的内存中字符串的小宝字母转换成大写字母并显示出来。主程序用另一个模块编写。(2)编写一个子程序,将主程序指定的字符所在的地址值返回给主程序,字符串与主程序在同一个模块。(1)转换字符串小写字母为大写字母的程序清单:;EXCHAR.ASM 为主模块的文件名EXTRNDNTOUP: FARPUBLIC STRING1, STRING2DATA SEGMENTSTRING1DB This is a Book,$STRING2DB 80 DUP (?)DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS: DATASTART: MOVAX, DATA MOVDS, AX CALLDNTOUP MOV AH, 4CH INT21HCODE ENDS ENDSTART;DNTOUP.ASM为子模块的文件名PUBLIC DNTOUPEXTRN STRING1: BYTE, STRING2: BYTECODE SEGMENT ASSUME CS: CODEDNTOUPPROCFAR MOVBX,0CYCLE: MOVAL, STRING1 BX CMPAL,24H;是否是STRING1结尾 JZDONE;是“$”,转DONE CMPAL,61H;是否是小写字母 JBNEXT;不是转NEXT CMPAL, 7AH JANEXT SUBAL,20H;转为大写字母NEXT: MOVSTRING2 BX,AL INCBX JMPCYCLEDONE: MOVAL,$ MOVSTRING2BX,AL;补一个$ MOVDL, 0DH MOVAH, 2 INT21H MOVDL, 0AH MOVAH, 2 INT21H ;显示回车。换行 LEADX, STRING1 MOVAH, 9 INT21H;显示源串内容 MOVDL, 0DH MOVAH, 2 INT21H MOVDL, 0AH MOVAH, 2 INT21H ;回车换行 MOVDX, OFFSET STRING2 MOVAH,9 INT21H;显示转换后的大写串 RETDNTOUPENDPCODE ENDSEND(2)查找指定字符,并返回地址值的程序清单:;MAINP.ASM为主模块程序名EXTRN FINDC: FARPUBLIC STRN DATA SEGMENTSTRN DB LINK DISPLAY SUBROUNTINE $ADDR DW ? DATA ENDSCODE SEGMENT ASSUMECS: CODE, DS: DATASTART: MOVAX, DATA MOVDS, AX MOVAH, 1 INT 21H CALLFINDC MOVADDR, DI MOVAH, 4H INT 21HCODE ENDSENDSTART ;FINDC.ASM为子模块程序名PUBLICFINDCEXTRNSTRN:BYTECODESEGMENT LEADI, STRNAGAIN:CMP BYTE PRT DI,$ JZDONE CMP AL, DI JNZNEXTDONE1:RETNEXT:INCDI JMPAGAINDONE:MOVDI, 0FF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论