1、DATA SEGMENT MES DB laoshihao:, 0AH,0DH,$ SD DB b DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV DX, OFFSET MES MOV AH, 09H INT 21H MOV DI, OFFSET SD MOV AL, DS:DI AND AL, 0F0H SHR AL,4 CMP AL, 0AH JB L1 ADD AL, 07H L1: ADD AL, 30H MOV DL, AL MOV AH, 02H AND AL, 0F
2、H JB L2 L2: MOV AX, 4C00H CODE ENDS END START 六、实验调试过程调试过程中出现警告,显示没有使用堆栈段。但是程序编写本身没有使用,因此程序运行相对正常。第一个实验熟悉了轻松汇编软件的操作,为之后的实验打下了基础。七、实验运行结果实验二 数据传送实验1. 熟悉Tddebug调试环境和Turbo Debugger的使用;2. 掌握与数据有关的不同寻址方式。将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。实验程序:DDATA SEGMENT MSR DB LAOSHIXINKULE!$ LEN EQU $- MSR DDATA E
3、NDS EXDA SEGMENT MSD DB LEN DUP(?) EXDA ENDS MYSTACK SEGMENT STACK DW 20 DUP(? MYSTACK ENDSDDATA, ES:EXDA MOV AX, DDATA MOV AX, EXDA MOV ES,AX MOV SI, OFFSET MSR MOV DI, OFFSET MSD MOV BX, 0 MOV CX, LEN NEXT: MOV AL, MSRBX MOV ES:MSDBX, AL INC BX LOOP NEXT PUSH ES POP DS MOV DX, OFFSET MSD MOV AH, 9
4、 END START1. 运行Tddebug软件,选择Edit菜单编写实验程序;五、实验调试过程程序中使用了寄存器相对寻址的方式。编译、连接、运行后程序运行正常。输入的字符显示在屏幕上。六、实验运行结果实验三 数码转换程序实验掌握不同进制数及编码相互转换的程序设计方法。 PC微机一台。三、实验步骤四、实验内容计算机输入设备输入的信息一般是由ASCII码或BCD码表示的数据或字符,CPU用二进制数进行计算或其它信息处理,处理结果的输出又必须依照外设的要求变为ASCII码、BCD码或七段显示码等。因此,在应用软件中,各类数制的转换和代码的转换是必不可少的。计算机与外设间的数码转换关系如图3-1所示
5、,数码对应关系如表3-1所示。图3-1 计算机与外设间的数码转换关系1将ASCII码表示的十进制数转换为二进制数 十进制数可以表示为:Dn10n+Dn-110n-1+D0100=Di10i 其中Di代表十进制数1、2、39、0。上式可以转换为:Di10i=(Dn10+Dn-1)10)+Dn-2)10+D1)10+D0 由上式可归纳十进制数转换为二进制的方法:从十进制数的最高位Dn开始作乘10加次位的操作,依次类推,则可求出二进制数结果。本实验要求将缓冲区中的一个五位十进制数00012的ASCII码转换成二进制数,并将转换结果按位显示在屏幕上。转换过程的参考流程如图3-2所示。(1)实验流程图图
6、3-2 十进制ASCII转换为二进制数参考流程(2)实验程序00012 LEN EQU $-MSR CODE SEGMENT ;CODE,DS: MOV AX,DATA MOV DS,AX MOV SI,OFFSET MSR MOV CX,LEN-1 MOV AL,DS:SI MOV AH,0 SUB AX,30H A1: MOV BX,0AH MUL BX INC SI MOV DL,DS: MOV DH,0 SUB DX,30H ADD AX,DX DEC CX JNZ A1 MOV CL,16 MOV BX,AX A2: ROL BX,1 MOV DL,BL AND DL,01H ADD
7、 DL,30H MOV AH,2H DEC CL JNZ A2 MOV AX,4C00H(3)调试过程调试过程正常没有出现问题。(4)实验结果2将十进制数的ASCII码转换为BCD码 本实验要求将键盘输入的一个五位十进制数54321的ASCII码存放入数据区中,转换为 BCD 码后,并将转换结果按位分别显示于屏幕上。若输入的不是十进制数的ASCII码,则输出“FF”。提示:一字节ASCII码取其低四位即变为BCD码。转换部分的实验流程参见3-3。(1)实验流程图3-3 十进制ASCII转换为BCD码参考流程 STRING DB INPUT:, STRING1 DB OUTPUT: MSR DB
8、 6,?,6 DUP(? LEA DX,STRING MOV AH,09H MOV DX,OFFSET MSR MOV AH,0AH MOV DL,0AH MOV DL,0DH LEA DX,STRING1 MOV CL,MSR+1 MOV SI,0002H MOV BX,OFFSET MSR MOV AL,BX+SI CMP AL,40H JNC B1 SUB AL,30H MOV CH,0 PUSH CX MOV CL,4 MOV DH,AL SHL DH,CL ROL DH,1 MOV DL,DH MOV AH,02H POP CX B1: JZ B2 MOV DL,46H B2:调试过
9、程中在换行显示时遇到了问题,无法换行显示。经过检查发现在显示过程中的换行代码写错了,改正之后程序显示正常。3将十六进制数的ASCII码转换为十进制数 十六位二进制数的值域为0-65535,最大可转换为五位十进制数。五位十进制数可表示为:ND=D4104+D3103+D2102+D1因此,将十六位二进制数转换为五位ASCII码表示的十进制数,就是求D1-D4,并将它们转化为ASCII码。本实验要求将缓冲区中存放的000CH的ASCII码转换成十进制数,并将转换结果显示在屏幕上。图3-4 将十六进制数的ASCII码转换为十进制数 MSR DW 000CH MDR DB 5 DUP(?), MOV
10、BX,OFFSET MDR MOV SI,5 MOV AX,MSR DEC SI MOV DX,0 MOV CX,0AH DIV CX MOV BX+SI,DL CMP AX,0 JNE A1 JE A3 MOV AL,30H MOV BX+SI,AL CMP SI,0 JNE A2 A3: MOV DX,OFFSET MDR调试过程中在显示时遇到了问题,无法逐个显示。改为直接显示之后程序显示正常。4BCD码转换为二进制码 本实验要求将四个二位十进制数的BCD码存放在某一内存单元中,转换出的二进制数码存入其后的内存单元中,转换结束,送屏幕显示。图3-5 BCD码转换为二进制码参考流程 MSR
11、DB 03H,02H,03H,05H,07H,06H,07H,08H,4 DUP(? MOV DI,8 MOV CX,4 MOV DH,0AH MOV SI,1 MUL DH ADD AL,BX+SI MOV BX+DI,AL MOV CH,AL MOV CL,8 ROL CH,1 MOV DL,CH MOV DL,42H MOV AH,2 MOV DL,13 MOV DL,10 ADD BX,2 INC DI调试过程中没有出现问题程序显示正常。实验四 运算类程序实验1. 掌握运算类指令编程及调试方法;2. 掌握运算类指令对各状态标志位的影响及测试方法。80x86指令系统提供了实现加、减、乘、
12、除运算的基本指令,可对表4-1所示的数据类型进行算术运算。表4-1 数据类型算术运算表1二进制双精度加法运算 本实验要求计算X+Y=Z,将结果Z输出到屏幕,其中X=001565A0H,Y=0021B79EH。实验利用累加器AX,先求低十六位和,并存入低址存储单元,后求高16位和,再存入高址存储单元。由于低位和可能向高位有进位,因而高位字相加语句需用ADC指令,则低位相加有进位时,CF=1,高位字相加时,同时加上CF中的1。在80386以上微机中可以直接使用32位寄存器和32位加法指令完成本实验的功能。(1)实验程序 X DW 065A0H,0015H Y DW 0B79EH,0021H Z D
13、W 2 DUP(? MOV CX,2 CLC MOV SI,0 MOV AX,XSI ADC AX,YSI MOV ZSI,AX LOOP L1 MOV BX,Z2 CALL LIST_BX MOV BX,Z MOV AH,4CH LIST_BX PROC MOV CH,4 ROL BX,CL AND DL,0FH CMP DL,39H JLE PRINT ADD DL,7 PRINT: DEC CH JNZ NEXT RET LIST_BX ENDP(2)调试过程调试过程中一开始将X、Y的高低位弄反了,结果输出结果错误改正后没有出现问题程序显示正常。实验五 分支程序设计实验1. 掌握分支程序
14、的设计方法。程序有顺序、循环、分支和子程序四种结构形式,分支结构的示意图如图5-1所示。本实验要求通过求无符号字节序列中的最大值和最小值来反映分支程序的结构形式。图5-1 分支结构示意图 实验可以使用BH,BL作为暂存现行的最大值和最小值,且在程序的初始,将BH和BL初始化为首字节的内容,然后进入循环操作。在循环操作中,依次从字节序列中逐个取出一个字节的内容与BH,BL进行比较,若取出的字节内容比BH的内容大或比BL中的内容小,则修改之。当循环结束操作时,将BH,BL分别送屏幕显示。参考实验流程如图5-2所示。1. 运行Tddebug软件,选择Edit菜单编写实验程序,提供8字节的数据:0D9
15、H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H;4. 更改数据区中的数据,考察程序的正确性。五、实验流程根据实验要求编写程序并调试,写出程序调试过程及运行情况。图5-2 分支程序实验流程图 六、实验程序 DATA SEGMENT D1 DB 0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H C1 EQU $-D1 MOV CX,C1-1 MOV BL,D1SI MOV BH,D1SI MOV AL,D1SI CMP AL,BL JNB L2 MOV BL,AL CMP AL,BH JNA L3 MOV BH,AL L3: CALL DISP MOV BL
16、,BH DISP PROC MOV CH,2 ROL BL,CL DISP ENDP七、实验调试过程调试过程没有出现问题程序显示正常。八、实验结果实验六 循环程序设计实验1. 掌握循环程序的设计方法。本实验要求通过求某数据区内负数的个数来表现循环程序的结构形式。要求实验程序在数据区中存放一组数据,为统计负数的个数,逐个判断区内的数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得到区内所包含负数的个数。循环程序的结构示意如图6-1所示。图6-1 循环结构示意图 1. 运行Tddebug软件,选择Edit菜单编写实验程序,提供10字节的数据:12H,88H,82H,89H,33H,90
17、H,01H,10H,0BDH,01H;五、实验程序 D1 DB 12H,88H,82H,89H,33H,90H,01H,10H,0BDH,01H MOV CX,C1 MOV BL,0 CMP AL,0 JNS L2 INC BL七、实验结果汇编实验实验心得: 汇编语言是本学期新学习的一门语言,在刚开始学习的时候确实遇到了很大的困难,他完全不同于C语言,但是老师上课讲解的非常细心,做实验的时候遇到的一些问题老师也会非常耐心的回答。因此经过老师的指点和自己的努力,我完成了汇编实验的要求内容。基本掌握了汇编语言的编写方法。为以后的学习打下了坚实的基础。实验十一 8259中断控制器应用实验1. 学习中断控制器8259的工作原理;2. 掌握可编程控制器8