微机实验.docx

上传人:b****6 文档编号:3622894 上传时间:2022-11-24 格式:DOCX 页数:11 大小:512.89KB
下载 相关 举报
微机实验.docx_第1页
第1页 / 共11页
微机实验.docx_第2页
第2页 / 共11页
微机实验.docx_第3页
第3页 / 共11页
微机实验.docx_第4页
第4页 / 共11页
微机实验.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

微机实验.docx

《微机实验.docx》由会员分享,可在线阅读,更多相关《微机实验.docx(11页珍藏版)》请在冰豆网上搜索。

微机实验.docx

微机实验

(一)

班级:

自动化35

姓名:

杨帅

学号:

2130504121

说明:

运行平台:

windowsXP32位虚拟机DOS下

调试工具:

debug系列指令

代码编写:

Notepad++(有语法高亮)

Q1.设有两个8个字节长的BCD码数据bcd1和bcd2。

bcd1数以1000H为首地址在内存中顺序存放;bcd2数以2000H为首地址在内存中顺序存放。

要求将其相加后的结果按顺序存放在以2000H为首地址的内存区中。

实验思路:

可以使用LOOP循环实现加法,使用BX进行寻址和存储移位的控制。

实验代码:

Datasegment

org1000H

bcd1DB01H,03H,05H,07H,09H,0BH,0DH,0FH

org2000H

bcd2DB00H,02H,04H,06H,08H,0AH,0CH,0EH

Dataends

codesegment

assumeCS:

code,DS:

Data

start:

MOVAX,Data

MOVDS,AX

MOVCX,8

MOVBX,0H

CLC;letCF=0

L1:

MOVAL,[BX+1000H]

ADDAL,[BX+2000H]

DAA;faddadjust

MOV[BX+2000H],AL

INCBX

LOOPL1

MOVAH,4CH

INT21H

codeends

endstart

实验结果:

(图仅为部分步骤)

Q2.设从2000H为首地址的内存中存放着10个带符号的字节数据,编程找出其中最大的数,并存入2000H单元中。

实验思路:

用dl存储当前最大的值,并不断循环替换。

实验代码:

datasegment

bcddb01h,02h,03h,04h,05h,06h,07h,08h,09h,00h

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movax,code

movcs,ax

;movds:

[2000h],bcd;movebcdto2000haddress

movsi,2000h

movcx,10;numberofbyte

movdl,00h;minumumnumber

L1:

lodsb;loadanumbertoAL

cmpal,dl

jngL2;al

movdl,al;al>dl,movealtodl

L2:

loopL1

movds:

[2000h],dl

movah,4ch

int21h

codeends

endstart

实验结果:

运行前的初始状态

可以看到运行到最后一步之后,DL=09H,即数据中最大的一个。

Q3.试编写程序,统计出某数组相邻两数之间符号变化的次数。

实验思路:

实验代码:

DATASEGMENT

ARRAYDB1,-1,2,-2,3,-3,4,-4,5,-5

NUMDB0

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEASI,ARRAY

MOVAL,[SI];getthe1stbyte

MOVBL,0;clear

MOVCX,9;10-1

AGAIN:

INCSI

XORAL,[SI]

JNSNEXT;SF=0,samesign

INCBL

NEXT:

MOVAL,[SI]

LOOPAGAIN

MOVNUM,BL

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

实验结果:

可以看到,运行结束之后,BL=09H,即数组正负变化的次数。

Q4.试编制一程序用乘法指令实现32位二进制数和16位的相乘。

实验思路:

实验代码:

.MODELSMALL

.8086

.DATA

N1DW1234H;32位数的高位

N2DW5678H;32位数的低位

N3DW1212H;16位数字

M1DW0

M2DW0

M3DW0

.CODE

.STARTUP

MOVAX,N2

MULN3;AL和N3相乘

MOVM3,AX

MOVM2,DX

MOVAX,N3

MULN1;将N1与N3相乘

ADDM2,AX;将乘积的低16位加上之前乘积的高16位

ADCM1,DX;高16位加0

.EXIT

END

实验结果:

Q5.设有两个等字长,字节型字符串,试编写汇编程序比较它们是否完全相等,若是,则将字符Y送入AL,否则将N送入AL。

实验思路:

实验代码:

DATASEGMENT

STR1DB'XIANJIAOTONGDAXUE','$'

STR2DB'SHANGHAIJIAODAXUE','$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,DS

MOVES,AX;prepareforCMPSB

LEASI,STR1

LEADI,STR2

MOVCX,17;numberofcharacters

REPZCMPSBSTR1,STR2

JNZNOTZ

MOVAL,'Y'

JMPRETURN

NOTZ:

MOVAL,'N'

RETURN:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

实验结果:

可以看到,执行INT21H指令之后,AL=4EH,即字符N的ASCII值。

心得体会:

这次实验中遇到了很多的困难,比如程序出错时不知道该如何下手修改和调试,整个过程我几乎用的都是dos下的debug命令来进行调试的,也是因为没有找到更佳方便的工具和IDE。

不过辛苦之后完成了实验还是很开心的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

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

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