汇编实验三

2018-12-22 22:49

汇编语言程序设计

实验三

(1)将下面的数据段输入,取名为1.asm, 保存在MASM文件夹下,生成.lst文件,不必连接运行,查看1.lst文件,试回答:DA1,DA2 的偏移量分别为多少? COUNT的值为多少?

data segment org 20h

num1=8

num2=num1+10h da1 db 'IBM PC' da2 db 0ah,0dh count equ $-da1 data ends end

汇编语言程序调试运行

学号: 姓名:

DA1 偏移量为20,DA2偏移量为26,count值为8

(2)输入下列指令,改正可能的错误(先不要运行程序):

data segment

var1 db 0, 25, 0DH,30 var2 db 12h,0a4h,6bh var3 db 'ABCDEF'

var4 dw 1234h, 5678h var5 dw 10h dup(?) data ends code segment

assume cs:code, ds:data begin 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 21h code ends

end start

正确代码: data segment

var1 db 0,25,0DH,255 var2 db 12h,04h,6bh var3 db 'ABCDEF'

var4 dw 1234h, 5678h var5 dw 10h dup(?) data ends code segment

assume cs:code, ds:data start: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 21h code 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 augend dd 9251 sum dd ? datas ends e_seg segment addend dd -5962 e_seg ends codes segment

assume cs:codes,ds:datas,es:e_seg start:

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 word ptr [sum+2],dx mov bx,word ptr [sum+2] mov ch,4 mov dh,1 AA:

mov cl,4 rol bx,cl mov al,bl and al,0fh add al,30h cmp al,3ah

jl print add al,07h print:

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 21h codes ends end start c.显示结果:

(4) 数组中是一组无符号数,将最小数放在M单元中,经过汇编后,形成.EXE文件,先用G=0命令执行程序,用-D命令查看M单元的内容,会发现结果不正确。用单步执行命令T查找程序中的逻辑错误。

DSEG SEGMENT

MSG DB 13, 15, 7, 25, 24 M DB ? DSEG ENDS CSEG SEGMENT

ASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEG MOV DS, AX

MOV CX, 4 MOV AL, MSG

L1:

NEXT:

MOV SI, OFFSET MSG+1 CMP AL, [SI] JB NEXT MOV AL, [SI] LOOP L1 MOV M, AL MOV AX, 4C00H INT 21H

CSEG ENDS END START

1. 程序说明:此程序的目的是要在13,15,7,25,24中找到最小数,并放在M单元。 2. 调试说明:

运行无问题

3. 错误问题:结果中M单元的内容是错的,此时M为13,但真实值应为6.

4.解决方法:

该程序的循环是一个死循环,无法将每个数都进行比较,因此,需要每次循环时地址+1才能将每个数进行比较,所以需要在循环上加“INC SI” 5.修改后程序

DSEG SEGMENT

MSG DB 13, 15, 7, 25, 24 M DB ? DSEG ENDS CSEG SEGMENT

ASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEG


汇编实验三.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017年牛津译林版英语3A全册教案(含教学反思)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: