18.现有程序如下:
DATA SEGMENT A DW 1234H B DW 5678H
S DB ?NO SWAP!$? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AH,1 INT 21H
CMP AL,?Y? JNZ M
CMP AL,?y? JNZ M
MOV AX,A XCHG AX,B MOV A,AX JMP N
M: MOV AH,9 LEA DX,S INT 21H
N: MOV AH,4CH INT 21H CODE ENDS END START 请回答:(1)该程序完成什么功能?
(2)若鍵盘输入“Y”时,A,B中的值各为多少?
19.现有程序如下: DATA SEGMENT X DB 23h Y DB 45h Z DB 0 DATA ENDS CODE SEGMENT
ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX MOV AL,X CMP AL,0 JGE L
16
ADD AL,Y MOV AH,0 ADC AH,0
MOV word ptr Z,AX JMP EXIT L: SUB AL,Y MOV AH,0 SBB AH,0
MOV word ptr Z,AX EXIT: MOV AH,4CH INT 21H CODE ENDS END START 请回答:(1)该程序计算的表达式是什么? (2)程序运行后,Z中的内容是什么?
20.现有程序如下: DATA SEGMENT BUF DB 0F3H S DB 0 DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,BUF TEST AL,80H JZ L NEG AL
L: MOV S,AL MOV AH,4CH INT 21H CODE ENDS
END START 请回答:(1)该程序完成什么功能?
(2)程序运行后S中的内容是什么?
21. 阅读以下程序,该程序段完成什么功能?
BUFFER DB 20 DUP(?) …… XOR BX,BX MOV CX,5 ONE:
17
MOV MOV MOV MOV ADD LOOP BUFFER[BX],0 BUFFER[BX+1],1 BUFFER[BX+2],2 BUFFER[BX+3], 3 BX,4 ONE
实验一、DEBUG调试环境实验
-寻找最大和最小数实验
一、
1、 2、 3、 4、
实验目的
学习循环程序结构,掌握编写循环处理程序的方法和技巧。 通过循环结构程序熟悉汇编语言程序设计的主要方法。 了解和掌握程序设计过程中算法的选择。 掌握汇编语言调试方法。
二、 实验内容
以buff开始的内存单元中有10个有符号数(字节型DB):
-37、28、-115、-2、98、-100、93、120、56、-99
请编写程序,找出最大的数并存入MAX单元中,同时也找出最小的数并存入MIN单元中,在Debug下运行程序,查看数据区MAX和MIN的内容检验运行结果。
三、 编程提示
1、 在数据段设置buff 区(DB)存放10个被测试的数,再分别设置字节数据MAX、MIN。例如:buff db -37、28、-115、-2、98、-100、93、120、56、-99 MAX db MIN db
2、通过一个循环程序完成比较,先用第一个数与第二个,把较小的数放在AL中,较大的数放在AH中。
3、以后每次都用AL与后面的数比较,把小的总放在AL中;然后再用AH与后面的数比较,把大的放在AH中;比较结束后AL和AH分别放最小和最大数。
四、 实验步骤
1、 在EDIT或其它编辑方式下输入源程序,并以XXX.ASM名保存。
2、 用MASM 文件汇编源程序,C>MASM XXX; 如有错误,回到第一步,如没错误,到第三步。 3、 用LINK连接程序,C>LINK XXX; 形成XXX.EXE文件。 4、 在DEBUG调试环境下调试并运行XXX.EXE程序。 C>DEBUG XXX.EXE回车
18
首先用R指令,然后使用U指令查看自己所编写的程序,确定断点后,使用G命令执行程序到断点,查看结果,程序运行结束后,用 D DS:0 检查数据区MAX及MIN内容,检查结果是否正确。
五、 思考
1、 查看DOS操作系统把可执行程序装载到的内存的首地址及结束地址。 2、 查看MAX和MIN的段地址及偏移地址。
3、 分别计算数据段和代码段占用的地址空间大小。
实验二、汇编语言程序设计作业和实验
汇编编程作业和实验3-1:统计学生成绩
一、
实验目的
1、 熟悉汇编语言各种跳转指令的功能和用法。 2、 学会用程序流程图来分析和设计分支程序。
3、 通过顺序和分支结构来熟悉汇编语言程序设计的主要方法。 4、 了解和掌握程序设计过程中算法的选择。
二、 实验内容
设有20个学生成绩分别56、78、67、40、87、99、63、51、74、100,90,80,68、88、55、66、84、96、45、73分。编写程序实现统计低于60分、60-69分、70-79分、80-89分、90-99分及100分的人数,并分别存放在s5、s6、s7、s8、s9、s10单元中。
三、 实验编程提示
1、 设计实现算法,并画出程序流程图。
2、 定义一数据段,首先定义一变量组存储学生的分数,再定义6个字节变量s5、s6、s7、s8、s9、s10用于统计各分数段的人数。
3、 在代码段中实现程序功能,程序开始应实现初始化存储变量及程序循环次数;并通过比较指令实现判断分支。
四、 实验步骤
1、 在EDIT或其它编辑方式下输入源程序,并以XXX.ASM名保存。
2、 用MASM 文件汇编源程序,C>MASM XXX; 如有错误,回到第一步,如没错误,到第三步. 3、 用LINK连接程序,C>LINK XXX; 形成XXX.EXE文件。
4、 在DEBUG环境下运行调试程序:C> DEBUG XXX.EXE回车,使用U命令反汇编自己编写的程序,查找到断点地址,用G命令使程序执行到完成初始化的功能;此时使用D命令查看数据段的内容,是否有学生的分数并查看s5、s6、s7、s8、s9、s10字节变量的地址及内容。然后查找程序功能结束的命令对应的断点地址,用G命令使程序运行到断点;此时再使用D命令查看存储各分数段的学生人数是否正确。如正确,调试结束;否则,从新单步调试查找错误。再从第一步修改源程序开始。
五、 思考
1、 请问存放学生分数的变量物理地址是什么?
19
2、 请问各分数段的变量地址是多少?
3、 如果想在屏幕上显示结果将怎样编写下面的程序?
汇编编程作业和实验3-2:统计键盘输入字符、数字个数
一、
1、 2、 3、 4、
实验目的
学习循环程序结构,掌握编写循环处理程序的方法和技巧。 通过循环结构程序熟悉汇编语言程序设计的主要方法。 了解和掌握程序设计过程中算法的选择。 掌握汇编语言的调试方法。
二、 实验内容
从键盘输入一系列字符(每种字符不超过9)并以回车符结束,请统计出字母、数字及其它字符的个数,最后在屏幕上显示计数结果。
三、 实验编程提示
1、 在数据段中定义三个字节变量分别存放数字、字符、及其它字符的个数。
2、 在代码段中设计一循环程序接收键盘输入的字符,并在循环程序中判断输入字符的 类型,根据结果计数变量值,循环程序以回车符退出。 3、 提示:MOV AH,1 INT 21H
等待键盘输入,输入字符的ASCII码放在AL寄存器中。 提示:MOV AH,2 INT 21H
在屏幕上显示单个字符,被显示字符的ASCII码放在DL寄存器中。
四、 实验步骤
1、 在EDIT或其它编辑方式下输入源程序,并以XXX.ASM名保存。
2、 用MASM 文件汇编源程序,C>MASM XXX; 如有错误,回到第一步,如没错误,到第三步。 3、 用LINK连接程序,C>LINK XXX; 形成XXX.EXE文件。
4、 运行程序:C> XXX回车,屏幕光标应停在一行的起始位置,并等待键盘输入字符;如输
入若干字母和数字字符后,输入回车字符,屏幕上应显示出所统计的字母、数字及其它字符的个数,说明程序运行正确;否则进入调试程序步骤。 调试程序:C>DEBUG XXX.EXE回车
首先用R指令,然后使用U指令查看自己所编写的程序,确定断点后,使用G命令执行程序到断点,查看结果是否正确,不断扩大运行程序的范围直到找到问题。
五、 思考
1、 回车字符的ASCII码是什么?
2、 统计出的数值如何在屏幕上显示出来。如果统计个数超过9时,又将如何处理? 怎样判断输入的是字母、数字及其它字符?
汇编编程作业和实验3-3:建立学生名次表
一、
实验目的
20