汇编实验(外设控制)

本文探讨了如何使用汇编语言简洁地编写程序,实现了从键盘接收字符串并倒序输出的功能,同时提出了利用DOS或BIOS中断及栈结构的解决方案。此外,还介绍了创建一个简单的射击游戏框架,通过上、下、左、右及ESC键控制游戏动作。
摘要由CSDN通过智能技术生成

汇编程序的简洁写法

编写程序:从键盘上输入一个字符串,以$结束,再将字符串倒序输出(字符串不超过80个字符)。要求用更简洁的写新法完成
输入样例:abcd#1234 efg$
输出样例:gfe 321#dcba
提示解法:
1、输入输出:字符的输入输出可以用DOS中断的01H功能,也可以用BIOS中断;
2、数据结构:可以用栈结构实现倒序,也可以专门设数据区,接受输入、变换并输出。

编写的程序如下:

.8086
.MODEL small
.data
      str db 13, 10, 100H dup('$')
.stack 100H
.code
start:
      mov ax, @data
      mov ds, ax
      lea bx, str
      add bx, 2
      mov cx, 0
input:
      mov ah, 01h ;DOS INT21H 01H 输入字符并回显
      int 21h
      cmp al, '$'
      je savestr
      push ax     ;栈只对字类型操作
      inc cx
      jmp input
savestr:
      pop ax
      mov [bx], al
      inc bx
      loop savestr

      lea dx, str ;DOS INT21H 09H 输出字符串
      mov ah, 09H ;DS:DX首地址 以'$'结束
      int 21h
 stop:
      mov ax, 4c00h
      int 21h
end start

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
matlab版星之咏叹类似雷电的纵版射击游戏-Stellaria Demo App 1.4.0.rar 本帖最后由 stellari 于 2012-9-25 15:24 编辑 本人近来无事,业余写得一款射击游戏。 从画面到游戏风格都是有意识模仿《雷电》的, 但是由于水平和素材的限制,最后成品不是很像,请谅解。 中上配置的电脑应该都能流畅运行,我的联想G460本上在某些敌机过多的场景会略卡。 * 本游戏以“纯”MATLAB写成:不需任何工具包,没有使用任何其他语言* 安装方法: --------- 1. 普通版本 解压附件中的 StellariaTechDemoB20120924.rar 压缩包, 将得到的所有文件放在一个文件夹中(比如该文件夹叫做StellariaTechDemo)即可。 (可以将该文件夹和其子文件夹添加至路径列表中,但这步现在不是必需的了。 2. App版本(仅适用于MATLAB R2012b): 解压附件中的 Stellaria Demo App 1.4.0.rar 在MATLAB主窗口的顶部的选项卡中选择Apps 然后点工具条栏左侧的Install App,在弹出的窗口中选择刚才解压出的文件即可。 运行方法: --------- 普通版本:运行StellariaTechDemo文件夹中的stl_StellariaMain App版本:在Apps面板中的Apps栏内选择Stellaria Demo即可 操作方法: --------- 1P: WSAD - 方向, u - 子弹, i - 炸弹 2P: 方向键 - 方向, insert - 子弹, delete - 炸弹 p - 暂停游戏 1,2 - 1P或2P开始游戏。 更新日志 ----------- 2012\09\25   * 删除了冗余的音乐素材文件 2012\09\24   * 加入App版本(仅R2012b下可用) 2012\09\10   * 现在不需要用户手动添加子目录了,解压后直接运行stl_StellariaMain即可。   * 现在在标题画面和结尾画面时可以直接关闭窗口,不会报错。   * 在游戏中试图关闭窗口,游戏会暂停并提示用户确认退出。若选No(默认)的话游戏会继续进行。 已确认的Bug: --------- 1. MATLAB2010b之前的用户可能会遇到下列错误(已修正): ??? Undefined function or method 'plus' for input arguments of type 'uint64'. Error in ==> stl_StellariaMain at 221                   stageStartTime = stageStartTime pauseElapsedTime.* timer2sec; 解决方案: 将stl_StellariaMain中的221行改为: stageStartTime = uint64 pauseElapsedTime.*timer2sec); 2. 如果遇到下列错误(已修正): ??? Error using ==> eval   Undefined function or variable 'stl_STAGE_TitleScreen'. Error in ==> stl_StellariaMain at 118   bkgMusicPlayer = eval; 请将stl_StellariaMain所在的目录和该目录的所有子目录添加到MATLAB搜索路径中去即可。 --- 用户报告的Bug -- 1. 暂停一段时间后再恢复游戏,在短时间内游戏速度会变得飞快,就像是要赶上刚才暂停时落下的进度一样。    解决方案:未知。 2. 某些文字是倒着的。    解决方案:未知 3. 按1\2键无法开始游戏。    解决方案:请确认中文输入已关闭(感谢会员rihkddd指出);且必须按键盘左上角的1,2键才能进入游戏,按小键盘中的数字键无效。 -- 如有任何问题请跟帖。 谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值