微机接口技术课程设计汇编语言开发环境认识Word格式文档下载.docx
《微机接口技术课程设计汇编语言开发环境认识Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《微机接口技术课程设计汇编语言开发环境认识Word格式文档下载.docx(23页珍藏版)》请在冰点文库上搜索。
code,ds:
data;
通知汇编程序有关段寄存器与逻辑段的关系
start:
movax,data;
ds<
==数据段地址
movds,ax
leadx,message;
取字符串message的有效地址存入dx
movah,09h;
调用9号功能显示字符串
int21h
movah,4ch;
非标准方式返回DOS
codeends
endstart
(二)流程图:
五、实验结果及分析
(一)结果:
C:
\Users\Administrator>
e:
E:
\>
cdtest
\test>
cdtest1
\test\test1>
test1
Howdoyoudo.
(二)分析:
无
微机原理与接口技术实验报告
(2)
Debug程序调试实验
2014/4/11实验成绩:
X和Y均为16位无符号数,写一个求表达式16X+Y值得程序
dsegsegment
xxxdw1234h;
设X为1234H
yyydw5678h;
设Y为5678H
zzzdd?
;
双自变量,用于保存结果
dsegends
csegsegment'
CODE'
;
指定代码段类别名,以便用MASM6.11汇编
cseg,ds:
dseg
movax,dseg;
DS<
movds,ax
movax,xxx;
AX<
==X
xordx,dx
movcx,16
mulcx;
DX|AX<
==X*16
addax,yyy;
==DX|AX+Y
adcdx,0
movwordptrzzz,ax;
zzz,<
==DX|AX
movwordptrzzz+2,dx
movah,4ch
csegends
\test\test2>
debugtest2.exe
-g
Programterminatednormally
-u
1472:
0000B87114MOVAX,1471
00038ED8MOVDS,AX
0005A10000MOVAX,[0000]
000833D2XORDX,DX
000AB91000MOVCX,0010
000DF7E1MULCX
000F03060200ADDAX,[0002]
001383D200ADCDX,+00
0016A30400MOV[0004],AX
001989160600MOV[0006],DX
001DB44CMOVAH,4C
001FCD21INT21
-d1471:
00000007
1471:
000034127856B87901004.xV.y..
-
数据送存时,高位字节数据放在内存高地址单元,低位放在低地址。
微机原理与接口技术实验报告(3)
简单汇编语言设计实验
2014/4/18实验成绩:
1.掌握宏汇编程序MASM5.1和链接LINK3.6的使用方法。
2.了解DEBUG调试汇编语言程序的过程及方法。
求两个数的平均数,这两个数分别放在x单元赫尔y单元中,而平均值放在z单元中。
.modelsmall
.data
xdb95;
等于十六进制数5Fh
ydb87;
等于十六进制数57h
zdb?
.code
mainprocfar
pushds
movax,0
pushax
movax,_data;
取数据段地址放入ds
moval,x;
第一个数送入al
addal,y;
两数相加,结果送入al
movah,0;
带进位加法,进位送入ah
adcah,0
movbl,2;
除数2送bl
divbl;
求平均值,商送入al,余数送入ah
movz,al;
平均值,即商送入z单元,结果为5Bh
ret
mainendp
\test\test3>
debugtest3.exe
00001EPUSHDS
0001B80000MOVAX,0000
000450PUSHAX
0005B87214MOVAX,1472
00088ED8MOVDS,AX
000AA00E00MOVAL,[000E]
000D02060F00ADDAL,[000F]
0011B400MOVAH,00
001380D400ADCAH,00
0016B302MOVBL,02
0018F6F3DIVBL
001AA21000MOV[0010],AL
001DCBRETF
001E5FPOPDI
001F57PUSHDI
-d1472:
0E10
00005F57_W
00105B[
对于div指令,注意其用法是ax除以单个字节数据时,商自动存入al,余数送存到ah。
微机原理与接口技术实验报告(4)
汇编程序设计1
2014/4/25实验成绩:
3.学会使用loop。
在屏幕上显示26个大写英文字母
.modelsmall
movax,_text
leadx,mess;
取提示字符串首地址
movah,09h
movcx,26;
用于loop检验循环条件的次数,此处为英文字母个数
movdl,41h;
41h,即‘A’的ASCII码
lp:
movah,02h;
显示器显示一个字符
incdl;
从‘A’的ASCII码递增
looplp
messdb"
26Englishletters:
"
0dh,0ah,24h
endstart
N
Y
\test\test4>
test4
ABCDEFGHIJKLMNOPQRSTUVWXYZ
每次循环显示前先检测计数值cx是否为零,不为零,则依次显示地震后的字母。
微机原理与接口技术实验报告(5)
汇编程序设计2
2014/5/2实验成绩:
分支程序设计:
给定符号函数,给定x任意值,假定为-25,且存放在x单元,函数值y存放在y单元,根据x的值确定函数y的值。
.model
xdb25;
此处选择一个正数,那么屏幕将显示“+1”
ydw?
movax,_data
moval,x;
al<
==x
cmpal,0
jgeloop1;
x0转loop1
moval,2dh;
否则将字符‘-’负号送入y单元低字节
movbyteptry,al
movdl,byteptry;
显示字符‘-’,即负号
movah,02h
movdl,31h;
显示字符‘1’
moval,0ffh
movbyteptry+1,al;
把-1的补码存入y单元的高字节地址
jmpnext;
直接跳转到最后,程序结束
loop1:
jeloop2;
x=0时转loop2
moval,2bh;
否则将字符‘+’保存到y单元低地址且显示出来
movdl,byteptry
moval,1;
把1送入y单元高地址
movbyteptry+1,al
movdl,byteptry+1
adddl,30h;
jmpnext
loop2:
moval,0;
将0送入y单元
moval,0
显示字符‘0’
next:
(二)
(三)流程图:
(四)
\test\test5>
test5
+1
debugtest5.exe
0005B87714MOVAX,1477
000AA00800MOVAL,[0008]
000D3C00CMPAL,00
000F7D1BJGE002C
0011B02DMOVAL,2D
0013A20900MOV[0009],AL
00168A160900MOVDL,[0009]
001AB402MOVAH,02
001CCD21INT21
001EB231MOVDL,31
-d1477:
0809
1477:
0000192B.+
本程序添加了显示功能,较教材有所改进。
微机原理与接口技术实验报告(6)
汇编程序设计3
2014/5/9实验成绩:
从xx单元开始的30个连续单元中存放有30个无符号数,从中找出找出最大者送入yy单元中。
xxdb73,59,61,45,81
db107,37,25,14,64
db3,17,9,23,55,97
db115,78,121,67
db215,137,99,241
db36,58,87,100,74,62;
其中最大的数应该是F1h,即241
yydb?
pushds
moval,xx
movsi,offsetxx
movcx,29
incsi
cmpal,[si]
jaeloop2
xchgal,[si]
looploop1
movyy,al
N
Y
\test\test7>
debugtest7
Filenotfound
-q
debugtest7.exe
0005B87314MOVAX,1473
000AA00000MOVAL,[0000]
000DBE0000MOVSI,0000
0010B91D00MOVCX,001D
001346INCSI
00143A04CMPAL,[SI]
00167302JNB001A
00188604XCHGAL,[SI]
001AE2F7LOOP0013
001CA21E00MOV[001E],AL
001FCBRETF
-d1473:
001e
1473:
0000493B3D2D49512519-0E40031109173761I;
=-IQ%..@....7a
00106B4E7343798963D7-243A57644A3EF1kNsCy.c.$:
WdJ>
.
进入调试,而没有执行‘g’命令时,内存单元储存的数据如下:
0000493B3D2D516B2519-0E40031109173761I;
=-Qk%..@....7a
0010734E7943D78963F1-243A57644A3E00sNyC..c.$:
该程序命令执行单步运行应该用‘t’,而不是用‘p’
微机原理与接口技术实验报告(7)
硬件控制实验
2014/5/16实验成绩:
利用DOS系统实现人机对话:
在屏幕上显示并键入一行信息。
.model
parsdb100;
定义输入缓冲区
db?
db100dup('
$'
)
mesgdb"
whatisyourname?
0dh,0ah,24h;
要显示的提示信息
.stack
db100dup(?
startprocfar
begin:
disp:
movdx,offsetmesg
movah,9;
利用9号功能调用显示提示
keybd:
movdx,offsetpars
movah,10;
利用10号功能调用接收键盘输入
movdl,0dh;
与下面的程序构成换行的功能
movdl,0ah;
与上面的程序构成换行的功能
leadx,pars+2
startendp
endbegin
\test\test8>
test8
abcdefghijklmnopqrstuvwxyz,.<
>
/?
;
'
\:
|[]{}-=_+!
@#$%^&
*()1234567890
#@E:
asfhjkfhqiuytrihnlgvnzxcbldpqk\gd]qomg'
a!
@#%^&
**()()*(+_+0231465498752.242349.
(三)分析:
上面程序两次运行的结果有所不同,原因是int21h中断的9号功能是“显示器显示一个以‘$’为结束标志的字符窜”。