汇编实验指导书09级.doc

上传人:wux****ua 文档编号:8966869 上传时间:2020-04-02 格式:DOC 页数:20 大小:86.50KB
返回 下载 相关 举报
汇编实验指导书09级.doc_第1页
第1页 / 共20页
汇编实验指导书09级.doc_第2页
第2页 / 共20页
汇编实验指导书09级.doc_第3页
第3页 / 共20页
点击查看更多>>
资源描述
汇编语言程序设计实 验 指 导 书 东北林业大学机电工程学院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,4c00h int 21hcode endsend start五、实验报告 列出任务中完整的程序清单。 在汇编语言程序中,如何对数组变量进行各分量的引用?(3) 针对实验内容作小结。实验四:伪操作功能验证一、实验目的 1. 熟悉汇编语言中变量定义伪操作。 2. 学会如何读取数组变量及如何对变量中的值进行条件判断。3. 了解小写字母在计算机内的表示方法,并了解其转换方法。4. 按照要求书写实验报告。二、实验仪器设备、材料 1. pc机三、预习内容 1. 认真阅读本实验指导。 2. 按实验内容要求,理解相关指令,编写程序。四、实验内容与步骤实验内容编写一个完整的程序放在代码段中,要求接受键盘输入的字符判断如果是小写字母就转换为大写字母,并进行显示,否则提示“error”错误信息。 实验步骤 对于任务1,在汇编该文件时,会有错误提示,据提示说明出错语句的错误原因,修改程序中的错误。 对于任务2 字符在计算机内以ASCII码值来表示,大小写字母也不例外,其中大写字母、小写字母在ASCII码字符集中连续存放,其值的范围分别为6590,97122。这样我们根据字符的ASCII码值,自然能判断字符是否是小写字符,同时对小写字符用减32的方法转化为其对应的大写字母。 键盘输入和字符显示用DOS调用实现。 参考程序,将空白处填上正确代码,并上机验证:data segment error db 0dh,0ah,error,$data endscode segmentassume cs:code,ds:datastart: mov ax,data mov ds,ax mov ah,01h int 21h cmp al,a jb err cmp al,z ja err sub al,32h mov dl,al mov ah,02h int 21h jmp exiterr: mov dx,offset error mov ah,09h int 21hexit: mov ax,4c00h int 21hcode endsend start五、实验报告 列出任务中完整的程序清单。 指出那段程序是对字符判断是否是小写字母?(3) 针对实验内容作小结。实验五:汇编语言分支程序设计一、实验目的 1. 掌握基本分支程序设计方法。2. 学习多重分支程序的设计方法。3. 掌握判断字母、数字的方法。4. 按照要求书写实验报告。二、实验仪器设备、材料 1. pc机三、预习内容 1. 认真阅读本实验指导。 2. 按实验内容要求编写程序。四、实验内容与步骤1.实验内容 接受键盘输入字符,判别该字符是否为字母、数字或非字母也非数字类字符。2.实验步骤 数字09与字母一样,在计算机内也是以ASCII码值来表示,其值范围为30H39H(4857),本题目字符分为三类: 字母; 数字; 非字母也非数字。对于键盘键入的任一字符,我们可以按其字符ASCII码值的情况自然区分。参考程序,将空白处填上正确代码,并上机验证:data segment msg1 db digit,0dh,0ah,$ msg2 db letter,0dh,0ah,$ msg3 db other,0dh,0ah,$data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov ah,1 int 21h ;读取一字符送入al cmp al,0 jb other cmp al,9 jbe digit ;转数字显示 cmp al,A jb other ;转非字母、数字显示 cmp al,Z jbe letter ;转字母显示 cmp al,a jb other cmp al,z jbe letter jmp otherdigit: mov dx,offset msg1 mov ah,09h int 21h ;显示“digit” jmp exitletter: mov dx,offset msg2 mov ah,09h int 21h ;显示“letter” jmp exitother: mov dx,offset msg3 mov ah,09h int 21h ;显示“other”exit: mov ax,4c00h int 21h ;返回DOScode endsend start五、实验报告 画出程序流程图,总结分支结构设计遵循的原则。 列出任务中完整的程序清单。(3) 针对实验内容作小结。实验六:汇编语言循环程序设计一、实验目的 1. 掌握循环程序的基本设计方法。2. 按照要求书写实验报告。二、实验仪器设备、材料 1. pc机三、预习内容 1. 认真阅读本实验指导。 2. 按实验内容要求编写程序。四、实验内容与步骤1.实验内容 统计一个有10人的班中,男、女生的人数各为多少。将统计结果的男生人数存入字节变量MAN中,女生人数存入字节变量WOMAN中,并显示结果。 2.实验步骤 男、女生的标志可用1和0字符来表示,并从键盘输入此标志。根据题意,总人数已知,在此范围下,对输入的标志进行分类求和显然可用循环结构来完成。每循环一次是相应人数增1,而循环计数值(开始为总人数)减1,直至该计数值为0。这样,我们可用CX作为循环计数值。用“LOOP”指令对循环的条件进行判断。 参考程序,将空白处填上正确代码,并上机验证: data segment man db ? woman db ?count equ 10 disp db 0dh,0ah,man or woman 1/0?,$ disp1 db 0dh,0ah,man,$ disp2 db 0dh,0ah,woman,$ data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov cx,10 input: mov dx,offset disp mov ah,09h int 21h mov ah,01h int 21h ;读入一个字符 cmp al,1 ;是男生? jz mancount cmp al,0 ;是女生? jz womancount jmp input mancount: INCMAN ;男生人数加1 jmp loopnextwomancount: inc woman ;女生人数加1loopnext: loop input mov dx,offset disp1 mov ah,09h int 21h mov dl,man add dl,30h mov ah,02h int 21h mov dx,offset disp2 mov ah,09h int 21h mov dl,woman add dl,30h mov ah,02h int 21h mov ax,4c00h int 21h code ends end start五、实验报告 画出程序流程图。 列出任务中完整的程序清单。(3) 针对实验内容作小结。 实验七:汇编语言子程序设计一、实验目的 1. 掌握子程序的编写和调用、返回及现场保护的方法。2. 按照要求书写实验报告。二、实验仪器设备、材料 1. pc机三、预习内容 1. 认真阅读本实验指导。 2. 按实验内容要求编写程序。四、实验内容与步骤1.实验内容设有10个学生的成绩分别是76,69,84,90,73,88,99,63,100和80。试编制一个子程序统计6069分,7079分,8089分,9099分和100分的人数并分别存放到S6,S7,S8,S9和S10单元中。2. 实验步骤data segment score db 76,69,84,90,73,88,99,63,100,80s6 db 0s7 db 0s8 db 0s9 db 0s10 db 0data endscode segmentassume ds:data,cs:codemain proc far ;主程序mov ax,data mov ds,ax call subcount ;调用子程序mov cx,5mov si,0 ;si为s7,s8,s9,s10相对s6的偏移量lop: mov dl,s6si ;显示统计结果 add dl,30h mov ah,02h int 21h call crlf ;调用回车换行子程序 inc si loop lop mov ax,4c00h int 21hmain endpsubcount proc near ;统计子程序 push ax ;保护现场 push cx push si mov cx,10 mov si,0next: mov al,scoresi cbw mov dl,10 ;除以10获得商 div dl cmp al,10 je add10 cmp al,9 je add9 cmp al,8 je add8 cmp al,7 je add7 cmp al,6 je add6add10: inc s10 jmp countinueadd9: inc s9 jmp countinueadd8: inc s8 jmp countinueadd7: inc s7 jmp countinueadd6: inc s6countinue: inc si loop next pop si ;恢复现场 pop cx pop ax retsubcount endpcrlf proc near mov dl,0dh mov ah,2 int 21h mov dl,0ah mov ah,2 int 21h ret ;子程序返回crlf endpcode endsend main五、实验报告 画出程序流程图。 列出任务中完整的程序清单。(3) 针对实验内容作小结。实验八:DOS中断例程应用一、实验目的1. 掌握DOS系统提供的DOS中断应用。2. 巩固汇编语言编程方法。3. 按照要求书写实验报告。二、实验仪器设备、材料 1. pc机三、预习内容 1. 认真阅读本实验指导。2. 参看教材,了解DOS中断功能调用方法,注意每个功能的入口参数,出口参数以及调用的中断功能号。四、实验内容与步骤1.实验内容(1)学习下面程序,程序实现在屏幕上的5行12列显示字符串“Welcome to masm!”。 data segmentstring db welcome to masm,$data endscode segmentassume cs:codestart: mov ah,2 ;置光标 mov bh,0 ;第0页 mov dh,5 ;dh中放行号5 mov dl,12 ;dl中放列号12 int 10h mov ax,data mov ds,ax mov dx,offset string ;ds:dx指向字符串的首地址 mov ah,9 int 21h mov ax,4c00h int 21hcode endsend start(2)参考上面程序,补全程序,程序为分别在屏幕上的第2、4、6、8行显示四句英文诗。data segments1 db Good,better,best,$s2 db Never let it rest,$s3 db Till good is better,$s4 db And better,best.,$s dw offset s1,offset s2,offset s3,offset s4row db 2,4,6,8data endscode segmentassume cs:code,ds:datastart: mov ax,data mov ds,ax mov bx,offset s mov si,offset row mov cx,4 ok: mov bh,0 mov dh, 【si】 mov dl,0 mov ah,2 int 10h mov dx, bx mov ah,9 int 21h add si,1 /inc si add bx,2 loop ok mov ax,4c00h int 21hcode endsend start2、实验步骤 (1)补充任务2的程序,建立汇编源程序,取名为Englishwords.asm。 (2)注意对源程序进行编译、连接后,连续多次回车将屏幕的内容上滚,直到屏幕上只剩下盘符提示才可运行.EXE程序。五、实验报告1.画出任务流程图,给出程序清单,并加适当的注释。2.小结DOS功能调用方法。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!