微机实验Word下载.docx
《微机实验Word下载.docx》由会员分享,可在线阅读,更多相关《微机实验Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
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
assumecs:
code,ds:
data
movax,data
movds,ax
movax,code
movcs,ax
;
movds:
[2000h],bcd;
movebcdto2000haddress
movsi,2000h
movcx,10;
numberofbyte
movdl,00h;
minumumnumber
lodsb;
loadanumbertoAL
cmpal,dl
jngL2;
al<
dl,turntoL2
movdl,al;
al>
dl,movealtodl
L2:
loopL1
movds:
[2000h],dl
movah,4ch
int21h
运行前的初始状态
可以看到运行到最后一步之后,DL=09H,即数据中最大的一个。
Q3.试编写程序,统计出某数组相邻两数之间符号变化的次数。
DATASEGMENT
ARRAYDB1,-1,2,-2,3,-3,4,-4,5,-5
NUMDB0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
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
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。
实验思路:
STR1DB'
XIANJIAOTONGDAXUE'
'
$'
STR2DB'
SHANGHAIJIAODAXUE'
MOVAX,DS
MOVES,AX;
prepareforCMPSB
LEASI,STR1
LEADI,STR2
MOVCX,17;
numberofcharacters
REPZCMPSBSTR1,STR2
JNZNOTZ
MOVAL,'
Y'
JMPRETURN
NOTZ:
N'
RETURN:
可以看到,执行INT21H指令之后,AL=4EH,即字符N的ASCII值。
心得体会:
这次实验中遇到了很多的困难,比如程序出错时不知道该如何下手修改和调试,整个过程我几乎用的都是dos下的debug命令来进行调试的,也是因为没有找到更佳方便的工具和IDE。
不过辛苦之后完成了实验还是很开心的。