ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:52.20KB ,
资源ID:12318262      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12318262.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编实验三.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汇编实验三.docx

1、汇编实验三汇编语言程序设计 实验三汇编语言程序调试运行学号: 姓名:(1)将下面的数据段输入,取名为1.asm, 保存在MASM文件夹下,生成.lst文件,不必连接运行,查看1.lst文件,试回答:DA1,DA2 的偏移量分别为多少?COUNT的值为多少?data segmentorg 20hnum1=8num2=num1+10hda1 db IBM PCda2 db 0ah,0dhcount equ $-da1data endsendDA1 偏移量为20,DA2偏移量为26,count值为8(2)输入下列指令,改正可能的错误(先不要运行程序):data segmentvar1 db 0, 2

2、5, 0DH,30var2 db 12h,0a4h,6bhvar3 db ABCDEFvar4 dw 1234h, 5678hvar5 dw 10h dup(?)data endscode segmentassume cs:code, ds:databegin mov ax, data mov ds, ax lea si, var5 mov bx, offset var2 mov si, 0abh mov ax, var1+2 mov bx, si mov var5+4, var4 mov ah, 4ch int 21hcode ends end start正确代码:data segmentv

3、ar1 db 0,25,0DH,255var2 db 12h,04h,6bhvar3 db ABCDEFvar4 dw 1234h, 5678hvar5 dw 10h dup(?)data endscode segment assume cs:code, ds:datastart:mov ax, data mov ds, ax lea si, var5 mov bx, offset var2 mov ax,0abh mov si,ax mov al,var1+2 mov ax,si mov bx,ax mov ax,var4 mov var5+4,ax mov ah,4ch int 21hco

4、de ends end start(3) 写一个完整的程序放在代码段C_SEG 中,要求把数据段D_SEG中的AGUEND和附加段E_SEG中的ADDEND相加,并把结果存放在D_SEG中的SUM中。其中AUGEND,ADDEND,SUM均为dw类型,AUGEND赋值为9251,ADDEND赋值为-5962。实验报告中要求写出源程序,简单叙述上机步骤,调试方法。a.实验步骤: 1. 将 AGUEND、AGUEND+2分别存入AX,DX中。 2与ADDEND、ADDEND+2相加后,将相加后的结果存入 SUM、SUM+2中。 3. 以十六进制的形式显示结果。b.源程序:datas segment

5、 augend dd 9251 sum dd ?datas endse_seg segment addend dd -5962e_seg endscodes segment assume cs:codes,ds:datas,es:e_segstart: mov ax,datas mov ds,ax mov ax,e_seg mov es,ax mov ax,word ptr augend add ax,word ptr es:addend mov dx,word ptr augend+2 adc dx,word ptr es:addend+2 mov word ptr sum,ax mov w

6、ord ptr sum+2,dx mov bx,word ptr sum+2 mov ch,4 mov dh,1AA: mov cl,4 rol bx,cl mov al,bl and al,0fh add al,30h cmp al,3ah jl print add al,07hprint: mov dl,al mov ah,2 int 21h dec ch jnz aa mov bx,word ptr sum mov ch,4 dec dh jz aa mov ah,4ch int 21hcodes ends end startc.显示结果:(4) 数组中是一组无符号数,将最小数放在M单元

7、中,经过汇编后,形成.EXE文件,先用G=0命令执行程序,用-D命令查看M单元的内容,会发现结果不正确。用单步执行命令T查找程序中的逻辑错误。DSEG SEGMENTMSG DB 13, 15, 7, 25, 24M DB ?DSEG ENDSCSEG SEGMENT ASSUME CS: CSEG, DS: DSEGSTART: MOV AX, DSEGMOV DS, AXMOV CX, 4MOV AL, MSG MOV SI, OFFSET MSG+1L1: CMP AL, SIJB NEXTMOV AL, SINEXT: LOOP L1MOV M, ALMOV AX, 4C00HINT

8、21HCSEG ENDSEND START1.程序说明:此程序的目的是要在13,15,7,25,24中找到最小数,并放在M单元。2.调试说明:运行无问题3.错误问题:结果中M单元的内容是错的,此时M为13,但真实值应为6.4.解决方法:该程序的循环是一个死循环,无法将每个数都进行比较,因此,需要每次循环时地址+1才能将每个数进行比较,所以需要在循环上加“INC SI”5.修改后程序DSEG SEGMENTMSG DB 13, 15, 7, 25, 24M DB ?DSEG ENDSCSEG SEGMENT ASSUME CS: CSEG, DS: DSEGSTART: MOV AX, DSEG

9、 MOV DS, AXMOV CX, 4MOV AL, MSG MOV SI, OFFSET MSG+1L1: CMP AL, SIJB NEXTMOV AL, SINEXT: INC SILOOP L1MOV M, ALMOV AX, 4C00HINT 21HCSEG ENDSEND START6.修改后运行结果:(5) 试编制一个汇编语言程序,求出首地址为DATA的10个无符号字数组中的最小偶数,把它存放在AX中。画出程序框图,写出源程序清单和执行结果。Data word 0141H, 0AE00H, 07B4H, 0A508H, 0691H,word 0870H, 7542H, 0081

10、H, 0916H, 0017Ha.设计思路:本程序需要在10个无符号数中寻找最小的偶数,关键点为 最小和偶数,所以需要两次判断,最后把结果放在AX中。b.程序设计图:c.程序说明dseg segment data dw 0141H,0AE00H,07B4H,0A508H,0691H,0870H,7542H,0081H,0916H,0017H dseg ends cseg segment assume ds:dseg,cs:cseg start: mov ax,dseg mov ds,ax mov cx,9 /循环次数为9 mov ax,data /取data的首地址放在ax中 mov si,o

11、ffset data+2 /取data的第二号地址放在si中L1: test ax,01h / 判断ax中的数是奇数还是偶数 jnz L2 /不等于0即为奇数,跳到L2地址 test word ptr si,01h /判断si中的数是奇数还是偶数 jnz next /奇数跳到next地址 cmp ax,si /比较ax与si jb next /ax小于si,跳到next地址L2: mov ax,si /ax与si进行交换next: add si,2 /si+2,取下个数地址 Loop L1 / L1进行循环mov ax,4c00h / 退出int 21h cseg ends end start

12、d.程序结果:(6)有10个数,统计正数的个数,存放在变量M中。经过汇编后,形成.EXE文件,先用G=0命令执行程序,用-D命令查看M单元的内容,会发现结果不正确。用单步执行命令T查找程序中的逻辑错误,注意每一次循环中AL寄存器中的值变化是否正确(AL寄存器中存放正数的个数)DSEG SEGMENTMSG DB 4, -2, -6, 0, 5, 67, 8, -3, 5, 6M DB?DSEG ENDSCSEG SEGMENT ASSUME CS: CSEG, DS: DSEGSTART: MOV AX, DSEGMOV DS, AXMOV CX, 10MOV AL, 0 LEA SI, MS

13、GL1: MOV BL, SICMP BL, 0JBE NEXTINC ALNEXT: INC SILOOP L1MOV M, ALMOV AX, 4C00HINT 21HCSEG ENDSEND STARTa.程序说说明这个程序的目的是要在4, -2, -6, 0, 5, 67, 8, -3, 5, 6中找出正数的个数。b.调试说明:运行无问题。c.错误问题:M单元中的内容错误,此时M为9,但真实值应为6.b.程序代码:dseg segment msg db 5, -4, 0, 3, 100, -51 result db 6 dup(?) dseg ends cseg segment ass

14、ume cs:cseg, ds:dseg start: mov ax,dseg mov ds,ax mov cx,6 /循环6次 lea si,msg /取msg的首地址放在si中 lea di,result /取result的首地址放在result中l1:mov bl,si /把si的内容放入bl中 cmp bl,0 /比较bl与0的大小 jl l3 / bl小于0,跳到L3地址 cmp bl,0 /比较bl与0的大小 jg l4 /bl大于0,跳到L4地址 mov bl,0/bl等于0 mov di,bl /把bl的内容放在di中 jmp l2/跳到L2中l3: mov bl,-1 /bl

15、=-1 mov di,bl /把bl的内容放在di中 jmp l2 /跳到L2中l4: mov bl,1 /bl=1 mov di,bl /把bl的内容放在di中l2:inc si/si+1 inc di /di+1 dec cx/cx-1cmp cx,0jz done jmp l1done:mov ah,4chint 21hcsej endsend startc.运行结果:(8)数据段中的三个字符,调用子程序将其逐个显示出来。子程序的功能是显示一个字符。单步执行,观察SP、IP的变化,并用D命令查看栈顶的内容。DATA SEGMENTMAG DB ABCDATA ENDSSTACK_SEG

16、SEGMENT DB 100 DUP(?)TOS LABEL WORDSTACK_SEG ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS: STACK_SEGSTART: MOV AX, STACK_SEG MOV SS, AX MOV SP, OFFSET TOS MOV AX, DATA MOV DS, AX MOV SI, 0 MOV CX, 3LL: MOV DL, MAGSI CALL MADD INC SI LOOP LL MOV Ax, 4C00H INT 21HMADD PROC MOV AH, 02H INT 21H RETMADD

17、ENDPCODE ENDSEND STARTa.单步执行程序,如下:从图中可以看出,在执行call命令前,SP一直保持0064不变而IP持续增加。在RET前从上图中可以看出,当程序在SP、IP每次都是分别按2和1递增,当运行到RET时,SP还是按照2来递增,而IP缺减少了,说明指针回撤执行下一个循环。上图为 用d命令查看栈顶内容程序执行结果:(9) 将一个给定的二进制数按位转换成相应的ASCII码字符串,送到指定的存储单元,如二进制数10010011转换成字符串为10010011。要求将转换过程写成子程序,且子程序应具有较好的通用性,而必须能实现对8位和16位二进制数的转换。(用寄存器或变量实

18、现参数传递)测试数据:Var8bit byte 10010011BVar16bit word显示单元:Show8bit byte 8 dup (?)Show16bit byte 16 dup (?)程序代码:data segment Var8bit db 93h Var16bit dw 0a3c4h Show8bit db 8 dup (?) Show16bit db 16 dup (?)data endscode segment assume cs:code, ds:datamain procstart: mov ax,data mov ds,ax mov dl,Var8bit ;二进制数传

19、给DX mov cx,8 ;置位数8 lea si,Show8bit ;字符串首址 si call btrascii ;调用子程序 mov si,byte ptr 0dh ;回车 mov si+1,byte ptr 0ah ;换行 mov si+2,byte ptr $ ;结束符 lea dx,Show8bit mov ah,9h ;打印字符串 int 21h mov dx,Var16bit mov cx,16 lea si,Show16bit call btrascii mov si,byte ptr 0dh mov si+1,byte ptr 0ah mov si+2,byte ptr $

20、 lea dx,Show16bit mov ah,9h int 21h mov ah,4ch int 21hmain endpbtrascii proc cmp cx,8 ;看cx是否为8 jne l1 mov dh,dl ;将8位二进制数移到dx高8位l1: mov al,0 rol dx,1 ;dx左循环一次,将当前最高位给CF rcl al,1 ;al带进位左循环一次,得到CF,即dx最高位 add al,30h ;将此位数转换成ascii码 mov si,al inc si loop l1 ;循环cx次 retbtrascii endpcode ends end start(10)将一

21、个给定的二进制数按位转换成相应的ASCII码字符串,送到指定的存储单元,如二进制数10010011转换成字符串为10010011。要求将转换过程写成子程序,且子程序应具有较好的通用性,而必须能实现对8位和16位二进制数的转换。(用堆栈实现传参:可以选择用子过程来平衡堆栈,也可以用调用过程来实现平衡堆栈,程序功能说明中要指出)测试数据:Var8bit byte 10010011BVar16bit word显示单元:Show8bit byte 8 dup (?)Show16bit byte 16 dup (?)程序代码:data segment Var8bit db 93h Var16bit dw

22、 0a3c4h Show8bit db 8 dup (?) Show16bit db 16 dup (?)data endsstack segment dw 20 dup(?) tos label word ;设置栈底,有无都可stack endscode segment assume cs:code, ds:data, ss:stackmain procstart: mov ax,stack mov ss,ax mov sp,offset tos mov ax,data mov ds,ax mov ax,offset Var8bit push ax mov ax,8 ;置位数8 push a

23、x mov ax,offset Show8bit ;字符串首址 push ax call btrascii lea dx,Show8bit mov ah,9h int 21h mov ax,offset Var16bit push ax mov ax,16 ;置位数8 push ax mov ax,offset Show16bit ;字符串首址 push ax call btrascii lea dx,Show16bit mov ah,9h int 21h mov ah,4ch int 21hmain endpbtrascii proc push bp mov bp,sp push bx pu

24、sh cx push si mov si,bp+8 ;二进制数 mov bx,si mov cx,bp+6 ;位数 mov si,bp+4 ;目标地址 cmp cx,8 jne label1 mov bh,bllabel1: mov al,0 rol bx,1 ;bx左循环一次,将当前最高位给CF rcl al,1 ;al带进位左循环一次,得到CF,即dx最高位 add al,30h ;将此位数转换成ascii码 mov si,al inc si loop label1 ;循环cx次 mov si,byte ptr 0dh ;回车 mov si+1,byte ptr 0ah ;换行 mov si+2,byte ptr $ pop si pop cx pop bx pop bp retbtrascii endpcode ends end start运行结果:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1