汇编语言实验教材.doc

上传人:rrsccc 文档编号:9007442 上传时间:2021-01-29 格式:DOC 页数:31 大小:217KB
返回 下载 相关 举报
汇编语言实验教材.doc_第1页
第1页 / 共31页
汇编语言实验教材.doc_第2页
第2页 / 共31页
汇编语言实验教材.doc_第3页
第3页 / 共31页
汇编语言实验教材.doc_第4页
第4页 / 共31页
汇编语言实验教材.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《汇编语言实验教材.doc》由会员分享,可在线阅读,更多相关《汇编语言实验教材.doc(31页珍藏版)》请在三一文库上搜索。

1、汇编语言实验教材 第一部分 指令系统一、 总体实验目的 学习掌握调试软件(DEBUG或TDEBUG)的基本使用方法。 掌握80X86的寻址方式 了解状态标志与控制标志的特点。 熟练掌握指令系统的基本操作 掌握DOS系统功能调用 掌握运算符及伪指令系统的基本操作 二、 总体实验内容 将寻址方式、状态标志、指令系统及运算符与伪指令系统等内容分为几部分,对其分别进行调试与验证。 实验一 寻址方式已知:(60000H)=12H, (60001H)=34H, (60002H)=56H, (60003H)=78H, (70000H)=0ABH, (70001H)=0CDH,(70002H)=0EFH, (

2、70003H)=0DH。分别执行下列指令后,填入指定寄存器的当前内容。MOV AX, 6000HMOV DS, AXMOV AX, 7000HMOV SS, AXMOV BX, 0MOV BP, 0MOV SI, 2MOV AX, BX ;AX=_MOV AX, 0000H ;AX=_MOV AL, 0000H ;AL=_MOV AX, BX ;AX=_MOV AL, BX+1 ;AL=_MOV AX, BX+1 ;AX=_MOV AL, BX+2 ;AL=_MOV AX, BX+2 ;AX=_MOV AX, BX+SI ;AX=_MOV AX, BP+SI ;AX=_按下列要求分别编写指令组

3、,将BLOCK数组中的第六个子数据存放在DX寄存器中。BLOCK DW 1234H, 5678H, AB,CD寄存器间接寻址寄存器相对寻址基址加变址寻址 实验二 标准寄存器MOV AL, 76H ADD AX, 0A6H将操作码改为ADC、SUB、SBB,分别执行后填表操作码ALOFSFZFAFPFCFADDADCSUBSBB1C1CD0D0000000000000000000000000 MOV AX, 2376H ADD AX, 00A6H将操作码改为ADC、SUB、SBB,分别执行后填表操作码ALOFSFZFAFPFCFADDADCSUBSBB MOV AX, 0A95BH ADD AX

4、, 8CA2H将操作码改为ADC、SUB、SBB,分别执行后填表操作码ALOFSFZFAFPFCFADDADCSUBSBB MOV AX, 8889H ADD AX, 7777H将操作码改为ADC、SUB、SBB,分别执行后填表操作码ALOFSFZFAFPFCFADDADCSUBSBB MOV AX,8765H AND AX,89ABH 将操作码改为OR、XOR、TEST分别执行后填表操作码ALOFSFZFAFPFCFANDORXORTEST MOV AX, 2736H SHL AX, 1 将操作码改为SHR、SAR分别执行后填表操作码ALOFSFZFAFPFCFSHL SHRSAR MOV

5、AX, 2736H MOV CL, 1 SHL AX, CL将操作码改为SHR、SAR分别执行后填表操作码ALOFSFZFAFPFCFSHL SHRSAR CLC MOV AX, 0A95BH ROL AX, 1 将操作码改为ROR、RCL、RCR分别执行后填表操作码ALOFSFZFAFPFCFROLRORRCLRCRSTC MOV AX, 0A95BH ROL AX, 1将操作码改为ROR、RCL、RCR分别执行后填表操作码ALOFSFZFAFPFCFROLRORRCLRCR 实验三 十进制加法运算指令 MOV AL,78H ADD AL,26H AL=_ DAA AL=_ CF =_ AF

6、=_ MOV AX, 78H ADD AX, 26H AX=_ DAA AX=_ CF =_ AF=_ MOV AX, 5678H ADD AX, 1224H AX=_ DAA AX=_ CF =_ AF=_ MOV AL,07H ADD AL,09H AX=_ DAA AX=_ CF =_ AF=_ MOV AL,07H ADD AL,09H AX=_ AAA AX=_ CF =_ AF=_试将上述指令改为减法后,再填入指定的寄存器或标志位的值 实验四 乘法运算指令 MOV AL,96H MOV BL, 12H MUL BL AX=_ CF =_ OF=_ MOV AL,96H MOV BL

7、, 12H IMUL BL AX=_ CF =_ OF=_ MOV AX, 916EH MOV BX, 18F2H MUL BX DX=_ AX=_ CF =_ OF=_ MOV AL,07H MOV BL, 09H MUL BL AX=_ AAM AX=_ CF =_ OF=_试将上述指令改为除法指令后,再填入指定的寄存器或标志位的值 实验五 逻辑运算指令 AND AX, AX AX=_ CF =_ ZF=_OR AX, AX AX=_ CF =_ ZF=_ XOR AX, AX AX=_ CF =_ ZF=_ 用一条逻辑指令使AX寄存器的高3位清0,其余位不变 _ 用一条逻辑指令使BX寄存

8、器的高3位置1,其余位不变 _ 用一条逻辑指令使CX寄存器的高3位取反,其余位不变 _ 用一条逻辑指令测试DX寄存器的D3位 _用一条逻辑指令将AX中与BX中的不相同的位均置为1,其余位不变 _ 实验六 循环移位指令 MOV AL,56H SHL AL,1 AL=_ OF =_ SF=_ ZF =_ PF_=_ CF =_ MOV AL,56H SHR AL,1 AL=_ OF =_ SF=_ ZF =_ PF_=_ CF =_ MOV AL,87H SHL AL,1 AL=_ OF =_ SF=_ ZF =_ PF_=_ CF =_ MOV AL,87H SHR AL,1 AL=_ OF =

9、_ SF=_ ZF =_ PF_=_ CF =_ MOV DX,0B9H MOV CL,3 STC ( ) 在下面的括号中分别填入下列指令,程序段执行后填表指令DX的值CFSHR DX,1SAR DX,CLSHL DX,CLSHL DL,1ROR DX,CLROL DL,CLSHL DH,1RCL DX,CLRCR DL,1 实验七 串操作指令程序段如下:CLDMOV AL,12HMOV SI, 2000HMOV DI,3000H( )在上述程序中的括号里分别填入下列指令。REP MOVSBREP LODSBREP STKSBREPZ SCASBREPZ CMPSB 试指出程序段分别完成什么动

10、作 试用其他指令完成上述指令的功能 将REPZ改成REPNZ后结果如何改变 实验八 程序控制类指令在下列程序的括号中分别填入指令如下。a LOOP L20b LOOPZ L20c LOOPNZ L20试说明在三种情况下,程序执行后,AX,BX,CX,DX四个寄存器的内存,并填入表中。XOR AX,AXMOV BX,2MOV CX,4MOV DX,3L20: INC AXADC BX,AXSHR DX,1( )HLT 指令AXBXCXDXLOOP L20LOOPZ L20LOOPNZ L20指令序列如下: CMP AX,BX JXX L1请在能引起转移到L1单元的条件转移指令下面画勾,AX,BX

11、的内容给定如下:AXBXJBJNBJBEJAJLJNLJLEJG1F52H1F52HFF82H007EH58BAH020EH09A0H1E97HFF5CHFF8BH8AEAHFC29H 实验九 80386、80486增强与增加指令 数据传送指令 扩展传送指令 MOVSX/MOVZX 设AX=1234H,BX=8765H 分别执行下列指令后,将32位寄存器ECX的内容填入表中:指 令 ECXMOVSX ECX, AXMOVSX ECX, BXMOVZX ECX, AXMOVSX ECX, BX 所有通用寄存器的内容进栈、弹栈指令PUSHA/POPA、PUSHAD/POPAD 试指出执行下列指令前

12、后的SP值及进栈、弹栈了那些寄存器及其顺序。指令前 SP 后寄存器及其顺序PUSHAPOPAPUSHADPOPAD 字节交换指令 BSWAP MOV EAX,12345678H EAX=_ BSWAP EAX EAX=_(2) 算术运算类 交换加法指令 XADD 设 AX=1234H,BX=5678H 执行XADD AX,BX后 AX=_ BX=_ 试指出与ADD指令的不同点。 有符号数乘法指令 IMUL 设AX=1234H,BX=5678H 执行IMUL AX, BX, 20H 后 AX=_ BX=_ 实验十 DOS系统功能调用 实验目的 掌握利用DOS/BIOS系统功能调用实现字符输入输出

13、的方法。 实验原理 DOS功能调用是指中断类型号21H(INT 21H)的调用。功能调用是057H(称为DOS功能调用)。INT 21H 功能调用分为字符输入、字符输出、磁盘控制、文件管理等种类。本实验着重了解字符输入输出DOS功能调用。常用的有键盘及显示(01H)、字符显示(功能号21H)、内存字符串输出(功能号09H)、无显示字符输入(功能07H)等。 实验内容 用01H号调用输入一个字符,用02H号调用显示输入的字符。用0H调用的结束程序。用DEBUG调试满足上述要求的程序。MOV AH, 01HINT 21HMOV DL,ALMOV AH,2INT 21HMOV AH,0INT 21H

14、用DEBUG状态下用A命令输入上面程序,用G命令执行。此时屏幕显示两个相同的字符,观察第一个是不是01H号调用输入后显示的,第二个是不是02H号调用后显示的。 用0AH号调用输入一个字符串,用09H号调用显示输入的字符串。TAB DB 50, 50 DUP($) LEA DX, TAB MOV AH, 0AH INT 21H LEA DX, TAB MOV AH, 09H INT 21H 用DOS 07H号调用和09H号调用实现密码输入和识别。 编程要求如下: 程序提示:Please Input Password: 由键盘输入密码。若正确,提示OK;若不正确,提示Error。密码由回车结束。

15、密码字符和全部信息在程序首部设置。 程序框图(见图1) 开始 程序定位在CS:100H设置密码及提示信息置寄存器初值提示输入密码识别正确?ERROR显示OK结束N Y 图1 程序框图 程序清单CODE SEGMENTORG 100HASSUME CS: CODESTART: JMP PP A1 DB WORD N1 EQU $-A1 A2 DB OK $ A3 DB Error $ A4 DB Please Input Password $ A5 DB 10 DUP(?)PP: MOV AX, CS MOV DS, AX MOV ES, AX MOV SS, AX LEA DX, A4 MOV

16、 AH, 9 INT 21H MOV DX, 0 MOV DI, OFFSET A5PA: MOV AH, 07H INT 21H CMP AL, 0DH JZ PB INC DX STOSB LOOP PAPB: MOV CX, DX JNZ PC LEA SI, A1 LEA DI, A5 REPZ CMPSB JNZ PC LEA DX, A2 MOV AH, 9 INT 21H JMP PDPC: LEA DX, A3 MOV AH,9 INT 21HPD: MOV AX,4C00H INT 21H CODE ENDS END START 实验十一 运算符与伪指令系统 将下列语句分配的

17、存储空间及初始化的数据值填入表中。a. A1 DB BYTE, 12, 12H, 2 DUP(0, ?, 3 DUP(1,2),?)b. A2 DW 4 DUP(0, 1, 2 ), ?, -5,BY,TE,256Hc. A3 DW A1, $+6, A2-A1 A1A2 A3 请总结DB、DW数据定义的特点。 对于下列的符号定义,分别指出下列指令的错误并改正 A1 DB ? A2 DB 10 K1 EQU 1024 K2 = 256a. MOV K1, AXb. MOV A1, AX c. MOV BX, A1 MOV BX,100 ; 将100送入A1单元d. CMP A1,A2e. K1

18、 EQU 2048 对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么? A1 DB ? A2 DW 10 DUP(?) A3 DB 10 DUP(?) A4 DB XYZ,123a. MOV AX,TYPE A1 AX=_b. MOV AX,TYPE A2 AX=_c. MOV AX, LENGTH A1 AX=_d. MOV AX, LENGTH A2 AX=_ 对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么? A1 DW ? A2 DW 10 DUP(?) A3 DB 10 DUP(?) A4 DB XYZ,123a. MOV AX,TYPE A1

19、 AX=_b. MOV AX,TYPE A2 AX=_c. MOV AX, LENGTH A1 AX=_d. MOV AX, LENGTH A2 AX=_e. MOV AX, LENGTH A3 AX=_f. MOV AX, LENGTH A4 AX=_g. MOV AX, SIZE A2 AX=_h. MOV AX, SIZE A3 AX=_ 第二部分 汇编语言程序设计一、总体实验目的 熟悉如何在微机上进行编辑、汇编、链接、调试和运行汇编语言程序的过程。 掌握分支程序设计、循环程序设计、子程序设计的方法。 了解汇编语言与高级语言的接口。二、程序框架 EXE文件的程序框架 程序框架中一般要定义

20、一个数据段和一个代码段,根据需要还可以定义堆栈段和附加段。通常指令放在代码段,变量放在数据段。DATA SEGMENT 在此加入数据定义DATA ENDSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU $-STASTACK ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK, ES:DATASTART: MOV AX,DATA MOV DS,AX MOV SS,STACK MOV AX,TOP MOV SP,AX在此加入指令段 MOV AX, 4C00H INT 21HCODE ENDSEND START COM文件的程

21、序框架程序框架中只有一个段并限制在64K之内,COM程序的堆栈由DOS自动产生,数据定义在代码段内,COM程序总是从偏移地址100H开始执行。CODE SEGMENTMAIN PROC FAR ASSUME CS: CODE,SS:CODE,DS:DATA ORG 100H PUSH DS XOR AX,AX PUSH AX在此加入指令段或数据定义 RETMAIN ENDPCODE ENDS END MAIN 自动产生汇编语言程序框架 Turbo C中提供了一个自动产生汇编语言框架的方法 实验一 汇编语言程序的调试和运行 实验目的 学习数据传送和算术运算指令的用法 熟悉在PC机上编辑、汇编、链

22、接、调试和运行汇编语言程序的过程 实验内容 将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在DATA1和DATA2为首的5个内存单元中,结果送回DATA1处。 程序框图 见图2程序清单DISP MACRO X MOV DL,X MOV AH,02H INT 21H ENDMDATA SEGMENTDATA1 DB 12732DATA2 DB 06815N EQU $-DATA2DATA ENDSSTACK SEGMENT STACKSTA DB 20 DUP(?)TOP EQU $-STASTACK ENDSCODE SEGMENT ASSUME CS:CODE, D

23、S:DATA, SS:STACK, ES:DATASTART: MOV AX, DATA MOV DS, AX MOV AX, STACK MOV SS, AX MOV AX, TOP MOV SP, AX LEA SI, DATA1 ;# MOV BX, 0 MOV CX, N CALL DISPL ;显示被加数 DISP + LEA SI, DATA2 MOV BX, 0 MOV CX, N CALL DISPL ;显示加数 DISP = LEA DI, DATA1 MOV CX, N CALL ADDA ;调用加法子程序 LEA SI, DATA1 MOV BX, 0 MOV CX, N

24、 CALL DISPL ;显示运算结果 DISP 0DH DISP 0AH MOV AX,4C00H INT 21H;*DISPL PROC ;显示子程序DS1: MOV AH, 02H MOV DL, SI+BX INT 21H INC BX LOOP DS1 RETDISPL ENDP;*ADDA PROC PUSH CX MOV BX, 0AD1: SUB BYTE PTR SI+BX,30H SUB BYTE PTR DI+BX, 30H INC BX LOOP AD1 POP CX PUSH CX MOV BX, N-1 CLCAD2: MOV AL, SI+BX MOV AL, D

25、I+BX AAA MOV DI+BX, AL DEC BX LOOP AD2 POP CX PUSH CX MOV BX, 0AD3: ADD BYTE PTR DI+BX, 30H INC BX LOOP AD3 POP CX RETADDA: ADD BYTE PTR DI+BX,30H INC BX LOOP AD3 POP CX RETADDA ENDPCODE ENDS END START开始显示被加数显示加数加法子程序结束显示结果 图2a开始ASCII码转换成十进制数CX赋初值清除进位位执行带进位位加法ADCAAA调整结果送到加数区调整偏移量CX-1=0?十进制数转换成ASCII码

26、终止图2b 两个多位十进制相加程序流程 调试步骤 编辑源程序,建立一个后缀为.ASM的文件 汇编源文件,检查程序是否有错误,有错时回到编辑状态,修改程序中错误行。无错误继续第步。 链接目标程序,产生可执行的程序。 用TDBUG调试可执行程序,记录数据段DS: 0DS:10的内容。 进入DEBUG程序执行程序至*处 DS:0HDS:0AH* (CS:000FH)* (CS:0076H) * (CS:0086H)* (CS:0090H) 在操作系统状态下,运行程序,并记录屏幕显示内容。被加数加数屏幕显示内容127321073265087068154369117631 思考题 将上述程序改为5位数相

27、加,结果位6位数的加法程序(需考虑进位) 简单叙述上机步骤,调试方法。 实验二 分支程序设计(一) 实验目的 掌握分支结构程序的编制方法。开始 实验内容与要求 编制程序实现如下操作(见图3) 初始化计数单元 初始化循环计数器初始化首地址取一个地址60? YS5+170? YS6+180? Y S7+1Y90?S8+1N修改地址100?S9+1S10+1循环结束? N结 束Y 图3 统计学生成绩程序流程 程序清单; 统计学生成绩DATA SEGMENT GRADE DW 95H, 60H, 75H, 92H, 71H, 86H, 54H, 89H, 83H, 76H N EQU ($-GRADE)/2 ORG 30H S5 DW 0 S6 DW 0S7 DW 0S8 DW 0S

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1