汇编实验三(2)

2018-12-22 22:49

MOV DS, AX MOV CX, 4 MOV AL, MSG

MOV SI, OFFSET MSG+1 L1: CMP AL, [SI] JB NEXT MOV AL, [SI] NEXT: INC SI LOOP L1 MOV M, AL MOV AX, 4C00H INT 21H CSEG ENDS END START

6.修改后运行结果:

(5) 试编制一个汇编语言程序,求出首地址为DATA的10个无符号字数组中的最小偶数,把它存放在AX中。画出程序框图,写出源程序清单和执行结果。

word 0141H, 0AE00H, 07B4H, 0A508H, 0691H, word 0870H, 7542H, 0081H, 0916H, 0017H

a. 设计思路:本程序需要在10个无符号数中寻找最小的偶数,关键点为 最小和偶数,

所以需要两次判断,最后把结果放在AX中。 b. 程序设计图:

Data

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,offset 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 d. 程序结果:

(6) 有10个数,统计正数的个数,存放在变量M中。经过汇编后,形成.EXE文件,先用G=0命令执行程序,用-D命令查看M单元的内容,会发现结果不正确。用单步执行命令T查找程序中的逻辑错误,注意每一次循环中AL寄存器中的值变化是否正确(AL寄存器中存放正数的个数)

DSEG SEGMENT

MSG DB 4, -2, -6, 0, 5, 67, 8, -3, 5, 6 M DB ? DSEG ENDS CSEG SEGMENT

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

MOV CX, 10 MOV AL, 0 LEA SI, MSG

L1: MOV BL, [SI]

CMP BL, 0 JBE NEXT INC AL

NEXT: INC SI LOOP L1

MOV M, AL MOV AX, 4C00H INT 21H

CSEG ENDS END START a. 程序说说明

这个程序的目的是要在4, -2, -6, 0, 5, 67, 8, -3, 5, 6中找出正数的个数。 b. 调试说明:

运行无问题。

c. 错误问题:M单元中的内容错误,此时M为9,但真实值应为6.

d. 解决方法:该程序不应用无符号数的跳转,因此,需要把JBE改为JLE e. 修改后代码:

DSEG SEGMENT

MSG DB 4, -2, -6, 0, 5, 67, 8, -3, 5, 6 M DB ? DSEG ENDS

CSEG SEGMENT

ASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEG MOV DS, AX MOV CX, 10 MOV AL, 0 LEA SI, MSG

L1: MOV BL, [SI] CMP BL, 0 JLE NEXT INC AL

NEXT: INC SI LOOP L1 MOV M, AL

MOV AX, 4C00H INT 21H CSEG ENDS END START f. 修改后结果:

(7) 假设有一组数据:5,-4,0,3,100,-51请编一程序,判断:每个数大于0,等于0,还是小于0;并将最终结果存于以result为存储的字节单元中,(Result DB 6 dup(?))

即:

y=

1 当x>0 0 当x=0

-1 当x<0 编程提示:

1.首先将原始数据装入起始地址为XX的字节存储单元中。

2.其中判断部分可采用CMP指令,得到一个分支结构,分别输出“y=0”, “y=1”,

“y=-1”。将结果存入result的相应单元

3.程序中存在一个循环结构,循环6次,调用6次分支结构后结束。

a.设计思路:该实验主要的两大步就是“与0比较”和“将结果存入result的相应单元”,因此,需要用指针来实现。

b.程序代码:

dseg segment

msg db 5, -4, 0, 3, 100, -51 result db 6 dup(?) dseg ends cseg segment

assume 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的大小


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

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

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

马上注册会员

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