在PC机上用汇编语言实现简单的人机交互程序.docx
《在PC机上用汇编语言实现简单的人机交互程序.docx》由会员分享,可在线阅读,更多相关《在PC机上用汇编语言实现简单的人机交互程序.docx(13页珍藏版)》请在冰豆网上搜索。
在PC机上用汇编语言实现简单的人机交互程序
在PC机上用汇编语言实现简单的人机交互程序
实验器材电脑
实验思路人机交互,即电脑与人的交流,电脑与人之间的对话也是其中一种,我实现人机交互是电脑与人的简单对话,教人用设置好的程序画图。
流程图
实验步骤
1将下面的程序输入电脑的asm文件中
SSEGSEGMENTPARASTACK'stack'
db60hdup('sseg...');初始化堆栈大小为100
SSEGENDS
DSEGSEGMENT
buf1db'Hello!
$'
buf2db'Hi!
$'
buf3db'Doyoulovepicture?
$'
buf4db'Pleasechooseyesorno.$'
buf5db'Youcantryitnow.$'
buf6db'Youareimpolite!
$'
buf7db'Youarepolite!
Ilikeit!
$'
buf8db'Youmadeanerror!
$'
buf9db'Pleasechooseagain!
$'
buf10db'IthinkIcannottalkmorewithyou!
$'
buf11db'Bye-Bye!
$'
buf12db'Ifyouwantturnup,pleasepressw!
$'
buf13db'Ifyouwantturndown,pleasepresss!
$'
buf14db'Ifyouwantturnleft,pleasepressa!
$'
buf15db'Ifyouwantturnright,pleasepressd!
$';定义输出的字符串
DSEGENDS
ESEGSEGMENT
;附加段:
在此处添加程序所需的数据
ESEGENDS
CSEGSEGMENT
assumecs:
CSEG,ds:
DSEG,es:
ESEG,ss:
SSEG
MAINPROCFAR;主程序入口
movax,dseg
movds,ax
movax,eseg
moves,ax;输入端口设置
begin:
leadx,buf1;将buf1的首地址传给dx
movah,9
int21h;输出buf1的内容
movdl,0ah
movah,02
int21h;输出换行
movdl,0dh
movah,02
int21h;输出回车,实现换行后,光标人在第一列
movah,07
int21h;输入字符
movbl,al
cmpbl,104;比较字符与h得ascall码值
jnzl1;判断为h的话程序继续执行不为h的话程序跳转到了l1
leadx,buf2;将buf2的首地址传给dx
movah,9
int21h;输出buf2的内容
movdl,0ah
movah,02
int21h;输出换行
movdl,0dh
movah,02
int21h;输出回车,实现换行后,光标任在第一列
leadx,buf7;将buf7的首地址传给dx
movah,9
int21h;输出buf7的内容
jmpstart;跳转到start程序
l1:
leadx,buf6;将buf6的首地址传给dx
movah,9
int21h;输出buf6的内容
movdl,0ah
movah,02
int21h;输出换行
movdl,0dh
movah,02
int21h;输出回车,实现换行后,光标任在第一列
start:
leadx,buf3;将buf3的首地址传给dx
movah,9
int21h;输出buf3的内容
leadx,buf4;将buf4的首地址传给dx
movah,9
int21h;输出buf4的内容
movdl,0ah
movah,02
int21h;输出换行
movdl,0dh
movah,02
int21h;输出回车,实现换行后,光标任在第一列
choose:
movah,07
int21h;无回显方式输入字符
movbl,al
cmpbl,110;比较字符与n得ascall码值
jzl2;判断不为的话程序继续执行为n的话程序跳转到了l2
cmpbl,121;比较字符与y得ascall码值
jzl3;判断不为的话程序继续执行为y的话程序跳转到了l3
leadx,buf8;将buf8的首地址传给dx
movah,9
int21h;输出buf8的内容
leadx,buf9;将buf9的首地址传给dx
movah,9
int21h;输出buf9的内容
movdl,0ah
movah,02
int21h;输出换行
movdl,0dh
movah,02
int21h;输出回车,实现换行后,光标任在第一列
jmpchoose;跳转到choose程序
l2:
leadx,buf10;将buf10的首地址传给dx
movah,9
int21h;输出buf10的内容
leadx,buf11;将buf11的首地址传给dx
movah,9
int21h;输出buf11的内容
movdl,0ah
movah,02
int21h;输出换行
movdl,0dh
movah,02
int21h;输出回车,实现换行后,光标任在第一列
jmpexit;跳转到exit程序
l3:
leadx,buf5;将buf5的首地址传给dx
movah,9
int21h;输出buf5的内容
movdl,0ah
movah,02
int21h;输出换行
movdl,0dh
movah,02
int21h;输出回车,实现换行后,光标任在第一列
leadx,buf12;将buf12的首地址传给dx
movah,9
int21h;输出buf12的内容
movdl,0ah
movah,02
int21h;输出换行
movdl,0dh
movah,02
int21h;输出回车,实现换行后,光标任在第一列
leadx,buf13;将buf13的首地址传给dx
movah,9
int21h;输出buf13的内容
movdl,0ah
movah,02
int21h;输出换行
movdl,0dh
movah,02
int21h;输出回车,实现换行后,光标任在第一列
leadx,buf14;将buf14的首地址传给dx
movah,9
int21h;输出buf14的内容
movdl,0ah
movah,02
int21h;输出换行
movdl,0dh
movah,02
int21h;输出回车,实现换行后,光标任在第一列
leadx,buf15;将buf15的首地址传给dx
movah,9
int21h;输出buf15的内容
movdl,0ah
movah,02
int21h;输出换行
movdl,0dh
movah,02
int21h;输出回车,实现换行后,光标任在第一列
movbh,00
movah,03
int10h;得到当前光标的位置dh为行位置dl为列位置
movch,dh;将行位置传给ch
jmppicture;跳转到picture程序
picture:
movah,07
int21h;无回显方式输入字符
cmpal,’w’
jzup
cmpal,'s'
jzdown
cmpal,'a'
jzleft
cmpal,'d'
jzright
jmppicture;跳回到picture程序
up:
subdh,1
movbh,00
movdh,dh
movah,2
int10h
movbh,00
moval,'|'
movah,0ah
movcx,1
int10h
jmppicture;跳回到picture程序
down:
adddh,1
movbh,00
movdh,dh
movah,2
int10h
movbh,00
moval,'|'
movah,0ah
movcx,1
int10h
jmppicture;跳回到picture程序
left:
subdl,1
movbh,00
movdl,dl
movah,2
int10h
movbh,00
moval,'-'
movah,0ah
movcx,1
int10h
jmppicture;跳回到picture程序
right:
adddl,1
movbh,00
movdl,dl
movah,2
int10h
movbh,00
moval,'-'
movah,0ah
movcx,1
int10h
jmppicture;跳回到picture程序
exit:
movah,1
int21h
movax,4c00h
int21h
MAINENDP
CSEGENDS
ENDMAIN
2对程序进行编译
3对程序进行连接
4运行程序
实验结果
程序运行结果
程序刚执行的画面
当你按下h时
当你没有按下h,而是其他键时
当你选择y时
当你选择n时
你可以使用wsda实行画图
实验心得
体会到编程最难弄的是构思,和程序的调试,这个程序长度很长,构思了一天,程序调试了一中午才弄出来,翻阅的书籍就只有《微机原理与接口技术》的教科书,感觉学到很多东西。
参考资料《微机原理与接口技术