资源预览内容
第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
第9页 / 共19页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
汇编语言程序设计实 验 指 导 书 东北林业大学机电工程学院2011年6月哈尔滨实验一:指令系统一、实验目的 1. 熟悉汇编语言中基本语句。 2.了解指令不同的寻址方式,注意规定或限制使用的寄存器。如:双操作数指令中,源操作数和目的操作数的地址不能同时为存储器地址,段跨越前缀不能使用CS,操作对象是地址还是地址中的内容,指令隐含使用的寄存器等。3.学会如何将数值转换成对应字符的ASCII码。 4.掌握DOS的字符串输出、单字符输入输出功能的使用。 二、实验仪器设备、材料 1. pc机三、预习内容 1. 认真阅读本实验指导。2. 按实验内容要求,理解相关指令,编写程序。3. 预习查看教材附录的DOS系统功能调用。四、实验内容与步骤 实验内容编写一个完整的程序。具体要求如下:要求下系统提示下从键盘输入两个数3和5,分别存入字节变量A和B中;求两个数的和,结果存放在数据段中的字节变量SUM中;将结果显示在屏幕上。实验步骤 提示的实现:在数据段中定义两个字符串,利用DOS的字符串输出功能显示。例如:数据段定义为:string1 db the first is:,0dh,0ah,$string2 db 0dh,0ah,the second is:,0dh,0ah,$代码段中:mov dx,offset string1mov ah,09hint 21h显示字符串string1,其它字符串显示相同。利用DOS的单字符输入功能,即可获得输入数字的ASCII码。字符的ASCII码为一个8位二进制数,计算时需要将ASCII转换为实际参加计算的数值。如数字3从键盘键入后,获得了字符3的ASCII码33H,需要在计算前求其真实数值,即33H-30H=3。部分代码如下:数据段:a db ?b db ?代码段:mov ah,01hint 21h ;键盘输入并回显sub al,30h ; 将ASCII转换为实际参加计算的数值mov a,al 显示时需将这8位二进制数值分别转换为其对应的ASCII码,显示调用DOS单字符输出功能。mov dl,sum ;将要显示的内容存放到dl中 add dl,30h ;将8位二进制数值转换为其对应的ASCII码 mov ah,02h ;单字符显示输出 int 21h 完整程序如下,将空白处填上正确代码,并上机验证:data segment string1 db the first is:,0dh,0ah,$ string2 db 0dh,0ah,the second is:,0dh,0ah,$ string3 db 0dh,0ah,the sum is:,0dh,0ah,$ a db ? b db ? sum db ?data endscode segmentassume cs:code,ds:datastart: mov ax,data mov ds,ax mov dx,offset string1 mov ah,09h int 21h mov ah,01h int 21hsub al,30h mov a,al mov dx,offset string2 mov ah,09h int 21h mov ah,01h int 21h sub al,30h mov b,al add al,a mov sum,al mov dx,offset string3 mov ah,09h int 21h mov dl,sum mov dl,30h mov ah,02h int 21h mov ax,4c00h int 21hcode endsend start五、实验报告(1) 列出完整的程序清单。(2) 针对实验内容作小结。实验二:汇编语言程序格式一、实验目的 1. 熟悉汇编语言中的移位指令、转移指令、控制循环指令。 2. 熟悉移位指令对CF位的影响,转移指令如何根据标志位进行转移。3. 学会定义和引用数组。4. 按照要求书写实验报告。二、实验仪器设备、材料 1. pc机三、预习内容 1. 认真阅读本实验指导。 2. 按实验内容要求,理解相关指令,编写程序。四、实验内容与步骤实验内容编写一个完整的程序,要求如下: 要求向把AL存放二进制数; 把AL中的每一位数保存到VALUE开始的字节单元中; 将VALUE中存放的AL的每一位数显示出来。 实验步骤 在数据段定义VALUE字节变量将用来存放程序运行时AL中8位二进制数,低字节放高位数,高字节放低位数,具体如图3-1所示。AL的D5AL的D4AL的D3AL的D2AL的D1AL的D0 AL的D7AL的D6VALUE7VALUE6VALUE5VALUE4VALUE3VALUE2VALUE1VALUE0 在数据段中可以定义为: VALUE DB 8 DUP(?) 对AL逻辑/算术左移,每次左移一位,即移出AL的当前最高位到CF标志中,判断CF,如果CF为1,则对相应的内存单元中写“1”,否则写“0”。 代码段中部分代码为: mov cx,8 mov si,0lop: shl/sal al,1 jc input1 mov valuesi,0 jmp nextinput1: mov valuesi,1next: inc si loop lop VALUE开始的连续8个字节单元,相当高级语言中长度为8的数组,对数组的引用可以使用寄存器相对寻址,其中寄存器存放各个单元相对VALUE的偏移量。代码参见。 完整程序如下,将空白处填上正确代码,并上机验证: data segment value db 8 dup(?)data endscode segmentassume cs:code,ds:datastart: mov ax,data mov ds,ax mov al,10011100b mov si,0 mov cx,8lop: sal/shl al,1 jc inpat1 mov valuesi,0 jump next input1: mov valuesi,1 next: inc si loop lop mov cx,8 mov si,0lop1: mov dl,valuesi add dl,30h mov ah,02h int 21h inc si loop lop1 mov ax,4c00h int 21hcode endsend start五、实验报告(1)列出完整的程序清单。(2)针对实验内容作小结。实验三:汇编语言程序格式一、实验目的 1. 熟悉汇编语言中指令,灵活使用各指令解决实际问题。 2. 学会如何将二进制数转换ASCII码的程序设计方法。3. 学会将二进制数以十进制数显示。4. 按照要求书写实验报告。二、实验仪器设备、材料 1. pc机三、预习内容 1. 认真阅读本实验指导。 2. 按实验内容要求,理解相关指令,编写程序。四、实验内容与步骤 实验内容编写一个完整的程序 要求将一个百位的十进制数存放到AX中,如352。 将AX中各位数存放到NUM开始的字节变量中,即NUM0存放个位数2,NUM1存放十位数5,NUM2存放百位数3。读取NUM中各个数字以十进制的形式显示在屏幕上。 实验步骤 将NUM中的二进制数除以10,所得余数为个位上的数,加上30H变为相应ASCII码。 所得的商再作为被除数除以10,得到的余数为十位上的数,加上30H变为相应的ASCII码。 所得的商再作为被除数除以10,得到的余数为百位上的数,直到所得的商为0时,结束。 参考程序,将空白处填上正确代码,并上机验证: data segmentnum db 5 dup(?)data endscode segmentassume cs:code,ds:datastart: mov ax,data mov ds,ax mov ax,352 mov bl,10 ;bl存放除数 mov si,-1 ;si存放数组下标continue: div bl inc si ;修改数组下标 add ah,30h ;得到的余数加上30H变为相应ASCII mov numsi,ah ;将得到的某位数存放到内存中 xor ah,ah ;ah清0,参加下次除法 test al,0fh ;判断商是否为0 jnz continue ;商是0顺序执行,不为零继续除 mov cx,si inc cx ;开始从高位到低位显示各位数dislop: mov dl,numsi mov ah,02h int 21h dec si loop dislop mov ax,4c
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号