1、实验一 标志寄存器应用 一、实验目与规定 1.掌握汇编程序编译过程; 2.掌握8086标志寄存器特点。 二、实验内容 练习辨认8086标志寄存器各种标志位。PC机中状态位表达如下: 标志位名称 为1相应符号 为0相应符号 OF 溢出标志 OV NV DF 方向标志 DN UP IF 中断容许标志 EI DI SF 符号标志 NG PL ZF 零标志 ZR NZ AF 半进位标志 AC NA PF 奇偶标志 PE PO CF 进位标志 CY NC DEBUG命令及其功能: 命令 功能 格式 A 对语
2、句进行汇编 A[<地址>] C 比较内存内容 C<源地址范畴><目的> D 显示内存内容 D[<地址>]或[<地址范畴>] E 修改内存内容 E<地址>[<字节串>…] F 填充内存内容 F<地址范畴><要填入字节或串> G 运营一种程序或程序段 G[=<始址>][<断点>…] H 十六进制加减法运算 H<数值1><数值2> I 读/显示输入字节 I<端口地址> L 装入文献或磁盘扇区 L[<地址>[<盘号><相称扇区><扇区数>]] M 传送内存块 M<源地址范畴><目的地址> N 定义文献名和参量 N<文献名>[<文献名>…]
3、 O 输出命令 O<端口地址><字节> P 单步,并跳过子程序 P[=<地址>][<执行条数>] Q 退出DEBUG Q R 显示和修改寄存器内容 R[<寄存器>] S 对字符进行检索 S<地址范畴><要检索字节> T 跟踪执行和显示 T[=<地址>][<跟踪条数>] U 对指令进行反汇编 U[<地址范畴>] W 写入文献或磁盘扇区 W[<地址>[<盘号><相称扇区><扇区数>]] 三、实验设备 微型计算机(80x86系列)。 四、实验参照程序 DATA SEGMENT A DW
4、123 B DW 456 SUM DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE ,DS:DATA START: MOV AX ,DATA MOV DS ,AX MOV AX ,A SUB AX ,B MOV S
5、UM ,AX MOV AH,4CH INT 21H CODE ENDS END START 五、实验环节 环节一、用鼠标单击开始菜单,单击运营。如下图所示: 环节二、在运营窗口中键入cmd,回车进入命令提示符。如下图所示: 环节三、在命令提示符中编辑程序文献。如下图所示: 1.C:\>D: 回车 2.D:\ >CD MASM611 回车 3.D:\MASM611>CD BIN 回车 4.D:\MASM
6、611>BIN> EDIT 文献名.ASM 编辑程序之后,从FLIE菜单中选取SAVE,之后选取EXIT退出 环节四、在命令提示行中编译程序。如下图所示: D:\MASM611>BIN>MASM 文献名.ASM 回车 环节五、在命令提示行中链接程序。如下图所示: D:\MASM611>BIN>LINK 文献名.OBJ 回车 回车 回车 回车 直到浮现 环节六、在命令提示行中运营程序。如下图所示: D:\MASM611>BIN>debug 文献名.exe 回车 依照DEBUG命令可以查看寄存器内容以及其他。 DEBU
7、G命令及其功能: 命令 功能 格式 A 对语句进行汇编 A[<地址>] C 比较内存内容 C<源地址范畴><目的> D 显示内存内容 D[<地址>]或[<地址范畴>] E 修改内存内容 E<地址>[<字节串>…] F 填充内存内容 F<地址范畴><要填入字节或串> G 运营一种程序或程序段 G[=<始址>][<断点>…] H 十六进制加减法运算 H<数值1><数值2> I 读/显示输入字节 I<端口地址> L 装入文献或磁盘扇区 L[<地址>[<盘号><相称扇区><扇区数>]] M 传送内存块 M<源地址范畴><目的地址> N
8、 定义文献名和参量 N<文献名>[<文献名>…] O 输出命令 O<端口地址><字节> P 单步,并跳过子程序 P[=<地址>][<执行条数>] Q 退出DEBUG Q R 显示和修改寄存器内容 R[<寄存器>] S 对字符进行检索 S<地址范畴><要检索字节> T 跟踪执行和显示 T[=<地址>][<跟踪条数>] U 对指令进行反汇编 U[<地址范畴>] W 写入文献或磁盘扇区 W[<地址>[<盘号><相称扇区><扇区数>]] 六、实验结论 1.程序运营后变量SUM值是多少? 2.程序运营先后标志寄存器各标志位有何变化? 3.分
9、析实验成果及所遇到问题,并阐明解决办法。 答:实验成果: 运营前: 运营后: 标志位分别为NV UP EI NG NZ NA PO CY SUM值同当前AX,SUM=FEB3。 问题:无 实验二 指令寻址方式练习 一、实验目与规定 1.掌握汇编语言调试工具(DEBUG)基本用法; 2.掌握8086寻址方式。 二、实验内容 练习辨认8086有关指令寻址方式。 DEBUG命令及其功能: 命令 功能 格式 A 对语句进行汇编 A[<地址>] C 比较内存内容 C<源地址范畴><目的> D 显示内存内容 D[<地址>]或[<地址范
10、畴>] E 修改内存内容 E<地址>[<字节串>…] F 填充内存内容 F<地址范畴><要填入字节或串> G 运营一种程序或程序段 G[=<始址>][<断点>…] H 十六进制加减法运算 H<数值1><数值2> I 读/显示输入字节 I<端口地址> L 装入文献或磁盘扇区 L[<地址>[<盘号><相称扇区><扇区数>]] M 传送内存块 M<源地址范畴><目的地址> N 定义文献名和参量 N<文献名>[<文献名>…] O 输出命令 O<端口地址><字节> P 单步,并跳过子程序 P[=<地址>][<执行条数>] Q 退出DEBUG
11、 Q R 显示和修改寄存器内容 R[<寄存器>] S 对字符进行检索 S<地址范畴><要检索字节> T 跟踪执行和显示 T[=<地址>][<跟踪条数>] U 对指令进行反汇编 U[<地址范畴>] W 写入文献或磁盘扇区 W[<地址>[<盘号><相称扇区><扇区数>]] 其中<…>表达输入内容;[…]表达为可选项。 三、实验设备 微型计算机(80x86系列)。 四、实验参照程序 DSEG SEGMENT ARRAY DB 11,56,78,8,76,90,96,33,21,06 COUNT
12、 DW $ - ARRAY RELUST DB ? DSEG ENDS SSEG SEGMENT PARA STACK 'STACK' SDAT DB 50 DUP (?) TOP EQU LENGTH SDAT SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG ,DS:DSEG ,SS:SSEG START: M
13、OV AX ,DSEG MOV DS ,AX ;寄存器寻址 MOV AX ,SSEG MOV SS ,AX MOV AX ,TOP MOV SP ,AX MOV BX ,OFFSET ARRAY MOV CX ,COUNT ;直接寻址 DEC
14、 CX MOV AL ,[BX] ;寄存器间接寻址 AGAIN: INC BX CMP AL ,[BX] JAE NEXT MOV AL ,[BX] NEXT: DEC CX JNZ AGAIN MOV RELUST,AL MOV AH,
15、4CH ;及时寻址 INT 21H CSEG ENDS END START 五、实验环节 1.D:\MASM>MASM SY2.ASM 2.D:\MASM>LINK SY2.OBJ 3.D:\MASM>SY2.EXE 4.D:\MASM>DEBUG SY2.EXE 六、实验结论 1.指出参照程序中带下划线指令中源操作数寻址方式? 2.程序运营后AL中值是多少? 3.分析实验成果及所遇到问题,并阐明解决办法。 答:运营成果: AL=60H 需要注意问题: MASM为16位运营方式,在64位机上需要模仿器。 MASM不支持非8.3文献命名方式。建议使用短目录及短文献名。 寻址方式:MOV AL ,[BX]是按字节寻址而不是按字寻址。 MOV AX ,SSEG MOV SS ,AX MOV AX ,TOP MOV SP ,AX 此四句无必要,使用ASSUME伪指令后,SS段运营时将自动装入,SP将自动置数。只需对DS或ES手动装入即可。此外,此汇编程序中没有堆栈操作指令,可以不合用STACK段。






