汇编语言程序设计实验篇

DIV BL (2)用BX作为地址指针,从BX所指的内存单元[0010H]开始连续存入三个无符号数(10H、04H、30H),计算内存单元中这三个数的和,并将和放在0013H单元中,再求出这三个数的乘积,并将乘积存入0014单元中,写出完成此功能的COM TEMPLATE程序。

(3)创建COM TEMPLATE程序,写出完成下述功能的程序段,并指出程序运行后AX=? 1)将15H传送到AL;

2)再将AL的内容乘以2; 3)将15H传送到BL;

4)把AL的内容乘以BL的内容。

(4)创建以下两个程序段的COM TEMPLATE程序并上机验证。 1)给数据段中从偏移地址1000H开始的12个字存储单元的内容赋值,请将第4条比较指令填写完整(划线处)。

MOV SI,1000H

NEXT: MOV WORD PTR[SI],1

ADD SI,2

CMP SI, JNE NEXT

2)假定要按高地址到低地址的顺序进行清除操作(高地址从1016H开始),则上述程序段应如何修改?

5. 实验习题

简要说明ADD、SUB、AND、OR指令对标志位的影响。

6. 报告要求

1)整理源程序段和运行结果,回答实验中的问题。

1.2.3 移位指令

1. 实验目的

1)熟悉移位指令的功能。

2)了解标志寄存器中各标志位的意义以及指令执行对它的影响。

2. 实验设备

微型计算机、emu8086

3. 实验原理

移位指令包括:1)非循环移位指令,如SAL,SAR,SHL,SHR;2)循环移位指令,如ROL,ROR,RCL,RCR

4. 实验内容

(1)创建COM TEMPLATE程序,输入以下程序段,单步执行并记录标志位的变化情况(提示:在emulator对话框中,单击按钮可以察看标志寄存器的值)。程序段及结果表格如错误!未找到引用源。。

表 2-3移位实验结果表格1

标志位 程序 程序段 MOV AX, 0 DEC AX ADD AX, 3FFFH ADD AX, AX NOT AX SUB AX, 3 OR AX, 0FBFDH AND AX, 0AFCFH SHL AX,1 RCL AX,1 0 0 0 0 0 0 CF ZF SF OF PF AF (2)写出完成下述功能的COM TEMPLATE程序并上机验证,程序运行后的商=? 1)传送数据2058H到[DS:1000H]单元中,数据12H到DS:1002H单元中; 2)把DS:1000H单元中的数据传送到AX寄存器; 3)把AX寄存器的内容算术右移二位;

4)再把AX寄存器的内容除以DS:1002H字节单元中的数; 5)最后把商存入字节单元DS:1003H中。 (3)创建COM TEMPLATE程序,输入以下程序段,单步执行并记录每一条指令对内存单元的影响结果(提示:在“emulator”对话框中,选择“view”菜单中的“memory”菜单项可以察看内存单元的值),分析结果并说明该程序段的功能是什么。程序段及结果表格如错误!未找到引用源。。

表 2-4移位实验结果表格2

程序段 MOV [1A00H], 0AA55H MOV [1A02H], 2AD5H SHL WORD PTR[1A02H],1 CMP [1A00H], 8000H CMC RCL WORD PTR[1A02H],1 RCL WORD PTR[1A00H],1 字单元[1A00H]= 字单元[1A02H]= 5. 实验习题

简要说明一般移位指令与循环移位指令之间的主要区别。

6. 实验报告要求

整理源程序段和运行结果,回答实验中的问题。

1.2.4 串操作指令

1. 实验目的

1)熟悉串操作指令的功能。 2)了解串操作指令的使用方法。

2. 实验设备

微型计算机、emu8086

3. 实验原理

串操作指令包括:1)串传送指令MOVS;2)串比较指令CMPS;3)串扫描指令SCAS;4)串装入指令LODS;5)串存储指令STOS。

4. 实验内容

(1)创建COM TEMPLATE程序,输入以下程序段,单步执行并根据结果回答后面的问题。

CLD

MOV DI,1000H MOV AX,55AAH MOV CX,10H REP STOSW

上述程序段执行后:

1)从ES:1000H开始的16个字单元的内容是什么?(提示:在“emulator”对话框中,选择“view”菜单中的“memory”菜单项可以察看内存单元的值) 2)DI=? CX=? 解释其原因。

(2)在上题的基础上,再输入以下程序段并执行,回答后面的问题。

MOV SI,1000H MOV DI,2000H MOV CX,20H REP MOVSB 程序段执行后:

1)从ES:2000H开始的16个字单元的内容是什么? 2)SI=? DI=? CX=? 并分析之。

(3)在以上两题的基础上,再分别输入以下三个程序段并运行之。

程序段1:

MOV SI,1000H MOV DI,2000H MOV CX,10H REPZ CMPSW

程序段1执行后:

1)ZF=? 根据ZF的状态,两个串是否比较完了?(提示:在emulator对话框中,单击按钮可以察看标志寄存器的内容) 2)SI=? DI=? CX=? 并分析之。

程序段2:

MOV [2008H],4455H MOV SI,1000H MOV DI,2000H MOV CX,10H REPZ CMPSW

程序段2执行后:

1)ZF=? 根据ZF的状态,两个串是否比较完了? 2)SI=? DI=? CX=? 并分析之。

程序段3:

MOV AX,4455H MOV DI,2000H MOV CX,10H REPNZ SCASW 程序段3执行后:

1)ZF=?根据ZF的状态,在串中是否找到了数据4455H? 2)SI=? DI=? CX=? 并分析之。

(4)从DS:6000H开始存放有一个字符串\is a string\,把这个字符串从后往前传送到DS:6100H开始的内存区域中(即传送结束后,从DS:6100H开始的内存单元的内容为\),试编写COM TEMPLATE程序并上机验证。(提示:可以在数据区中直接输入字符串)

5. 实验习题

1)简要说明执行串操作指令之前应初始化哪些寄存器和标志位。 2)总结串操作指令的用途及使用方法。

6. 实验报告要求

整理源程序段和运行结果,对结果进行分析。

1.2.5 DOS功能调用

1. 实验目的

1) 掌握简单的DOS系统功能调用。

2. 实验设备

微型计算机、emu8086

3. 实验原理

本节要用到的DOS功能命令包括: 从键盘输入单个字符的语句如下: MOV AH,1 INT 21H

以上两条指令执行后,(AL)=从键盘输入的字符 在屏幕上显示单个字符的语句如下: MOV DL,<要显示的字符> MOV AH,2 INT 21H

注意:源程序中所有语法符号都必须是半角符号,而且不允许汉字字符。 在屏幕上显示字符串的语句如下:

LEA DX,<字符串变量名,字符串必须以字符′$′作为结束> MOV AH,9 INT 21H

从键盘上输入字符串的语句如下: LEA DX,<键盘缓冲区名> MOV AH,0AH INT 21H

4. 实验内容

(1)字符的输入和输出

从键盘读入一个小写字母,输出字母表中倒数与该字母序号相同的那个字母。例如输入首字母a,则输出最后一个字母z,输入第4个字母d则输出倒数第4个字母w。

程序流程图如错误!未找到引用源。所示。

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4