目录

  • 指令大全
  • 命令和实例
    • 命令
    • 实例
  • 程序
    • 程序1
    • 程序1 解释
    • 程序2
    • 程序3
    • 程序4
    • 程序5
    • 程序6
    • 程序7
    • 程序8
    • 程序9

指令大全



C: 进位
Z:结果为空
V:溢出
S:符号

命令和实例

命令

A: 命令写一小段汇编程序
U: 命令反汇编刚输入的程序
G:命令连续运行该程序
T、P: 命令单步运行并观察程序单步执行
R:命令显示/修改寄存器内容
D: 命令显示存储器内容
E :命令修改存储器内容
————————————————————————————

实例

  1. 显示寄存器的内容
R

  1. 修改R0寄存器中的内容

注:主机上会显示 寄存器原值:-,这时在-后面写上寄存器新值即可

R  RO

  1. 显示从 2000H 地址开始的连续 128 个字的内容
 D 2000

  1. 在命令行提示符状态下输入: E 2000
    屏幕显示: 2000 地址单元的原有内容:光标闪烁等待输入 此时输入 0000
    依次改变地址单元 2001~2005 的内容为:1111 2222 3333 4444 5555

程序

程序1

设计一个小程序, 从键盘上接收一个字符并在屏幕上输出显示该字符。
在命令行提示符状态下输入 A 2000 编写程序

2000: IN 81            //判键盘上是否按了一个键
2001:SHR R0           //即串行口是否有了输入的字符
2002:SHR R0
2003:JRNC 2000        //未输入完则循环测试
2004:IN 80           //接收该字符
2005: OUT 80         //在屏幕上输出显示字符
2006: RET            //每个用户程序都必须用RET 指令结束
2007:               //按回车键即结束输入过程

注:在十六位机中,基本 I/O 接口的地址是确定的,数据口的地址为 80,状态口的地址为81 在命令行提示符状态下输入 G 2000
执行程序 注:光标闪烁等待输入,用户从键盘键入字符后,屏幕会显示该字符。该例建立了一个从主存 2000H 地址开始的小程序。在这种方式下,
所有的数字都约 定使用 16 进制数,故数字后不用跟字符 H。每个用户程序的最后一个语句一定为 RET
汇编语句。因为监控程序是选用类似子程序调用方式使实验者的程序投入运行的,用户程序只有用RET 语句结束,
才能保证程序运行结束时能正确返回到监控程序的断点, 保证监控程序能继续控制教学机的运行过程。

程序1 解释

原文链接:https://blog.csdn.net/qq_20179227/article/details/102883539

此代码块实现从键盘接收一个按键的ASCII码的值。先由IN 81,将81串口的信息接收到R0,再通过SHR将R0的二进制值向右移动两位。*因为将二进制数整体向右移动,左边高位补0,而原二进制数的最低位将被遗失,这个遗失的值在汇编语言中会保存在C中。*通过判断第二次移动,所遗失的值,来得到键盘上是否有按键被按下。 如果第二次移动所遗失的值,为0,则表示没有按键被按下,这时候就跳转回IN 81的位置,继续等待按键按下。如果遗失的值为1,则程序会继续向下执行,那么就会从80串口接收键盘按下的值,然后存到R0中,这个时候存入的值,是那个按键所对应的ASCII码的值。

程序2

设计一个小程序, 用次数控制在终端屏幕上输出’0’到’9’十个数字符。

在命令行提示符状态下输入: A 2020, 从地址 2020 开始输入下列程序:

2020:MVRD R2,00OA    //送入输出字符个数
2022:MVRD R0,0030    //“0”字符的ASCII 码送寄存器 R0
2024:OUT 80         //输出保存在 R0 低位字节的字符
2025:DEC R2        //输出字符个数减 1
2026:JRZ 202E      //判10 个字符输出完否,已完则Z=1,转到程序结束处
2027:PUSH R0       //未完,保存 R0 的值到堆栈中
2028:IN 81         //查询接口状态,判字符串行输出完成否,
2029:SHR R0
202A:JRNC 2028     //未完成C=0, 则循环等
202B:POP R0        //已完成, 准备输出下一字符并从堆栈恢复 R0 的值
202C:INC R0       //得到下一个要输出的字符
202D:JR 2024      //转去输出字符
202E:RET

该程序的执行码放在 2020H 起始的连续内存区中。若送入源码的过程中有错, 系统会进行提示, 等待重新输入正确汇编语句。在输入过程中, 在应输入语句的位置直接打回车则结束输入过程。
在命令行提示符状态下输入: G 2020↙
执行结果为: 0123456789

程序3

在终端屏幕上输出’A’到’Z’共 26 个英文字母

2020:MVRD R2,001A
2022:MVRD R0,0041
2024:OUT 80
2025:DEC R2
2026:JRZ 202E
2027: PUSH RO
2028:IN 81
2029:SHR RO
202A:JRNC 2028
202B: POP RO
202C: INC RO
202D: JR 2024
202E: RET

程序4

从键盘上连续打入多个属于‘0’到‘9’的数字符并在屏幕上显示, 遇到非数字字符
结束输入过程。

2040:MVRD R2,0030
2042:MVRD R3,0039
2044:IN 81
2045:SHR RO
2046:SHR RO
2047:JRNC 2044
2048:IN 80
2049:MVRD R1,0OFF
204B:ADD RO,R1
204C:CMP RO,R2
204D:JRNC 2053
204E:CMP R3,R0
204F:JRNC 2053
2050:OUT 80
2051:JMPA 2044
2053: RET

程序5

计算 1 到 10 的累加和。

2060: MVRD R1,0000
2062: MVRD R2,000A
2064: MVRD R3,0000
2066:INC R3
2067:ADD R1,R3
2068:CMP R3,R2
2069:JRNZ 2066
206A: RET

程序6

计算1到100的累加和

2060:MVRD R1,0000
2062:MVRD R2,0064
2064:MVRD R3,0000
2066: INC R3
2067: ADD R1,R3
2068: CMP R3,R2
2069:JRNZ 2066
206A: RET

程序7

计算斐波那契数列的第10项

2060:MVRD R1,0001
2062: MVRD R2,0001
2064: MVRD R3,0000
2066: MVRD R6,0002
2068: MVRD R7,000A
206A: INC R6
206B: ADD R3,R1
206C: ADD R3,R2
206D: MVRR R2,R1
206E: MVRR R1,R3
206F: MVRD R3 ,0000
2071: CMP R6,R7
2072: JRMZ 206A
2073: RET

程序8

设 计 一 个 有 读 写 内 存 和 子 程 序 调 用 指 令 的 程 序 , 功能是读出内存中的字符,将其显示到显示器的屏幕上,转换为小写字母后再写回存储器原存储区域。
将被显示的 6 个字符‘A’~‘F’送入到内存 20F0H 开始的存储区域中。
E 20F0↙
E 20F1↙
E 20F2↙
E 20F3↙
E 20F4↙
E 20F5↙

20F0 内存原值:0041
20F1 内存原值:0042
20F2 内存原值:0043
20F3 内存原值:0044
20F4 内存原值:0045
20F5 内存原值:0046

从地址 2080H 开始输入下列程序:

2080:MVRD R3,0006           //指定被读数据的个数
2082:MVRD R2,20F0          //指定被读、写数据内存区首地址
2084:LDRR R0,[R2]         //读内存中的一个字符到 R0 寄存器
2085:CALA 2100           //指定子程序地址为 2100,调用子程序,完成显示、转换并写回
2087:DEC R3            //检查输出的字符个数
2088:JRZ 208B          //完成输出则结束程序的执行过程
2089:INC R2            //未完成,修改内存地址
208A:JR 2084            //转移到程序的 2086 处,循环执行规定的处理
208B:RET

从地址 2100H 开始输入下列程序:

2100:OUT 80            //输出保存在 R0 寄存器中的字符
2101:MVRD R1,0020
2103:ADD R0,R1       //将保存在 R0 中的大写字母转换为小写字母
2104:STRR [R2],R0    //写R0中的字符到内存,地址同LOD所用的地址
2105:IN 81          //测试串行接口是否完成输出过程
2106:SHR R0
2107:JRNC 2105       //未完成输出过程则循环测试
2108:RET             //结束子程序执行过程,返回主程序

程序9

设计一个程序在显示器屏幕上循环显示 95 个(包括空格字符)可打印字符。

20A0: MVRD R1,7E     //向寄存器传送立即数
20A2: MVRD R0,20
20A4: OUT 80     //通过串行接口输出R0 低位字节内容到显示器
20A5: PUSH R0     //保存 R0 寄存器的内容到堆栈中
20A6: IN 81      //读串行接口的状态寄存器的内容
20A7: SHR R0      //R0寄存器的内容右移一位,最低位的值移入标志位 C
20A8: JRNC 20A6      //条件转移指令,当标志位C不是1时就转到20A6
20A9: POP R0        //从堆栈中恢复 R0 寄存器的原内容
20AA: CMP R0,R1       //比较两个寄存器的内容是否相同,相同则标志位 Z=1
20AB: JRZ 20A0       //条件转移指令,当标志位Z为1 时转到200A0 地址
20AC: INC R0      //把R0 寄存器的内容增加 1
20AD: JR 20A4       //无条件转移指令,一定转移到 20A4 地址
20AE: RET         //子程序返回指令,程序结束

TEC-XP 汇编学习相关推荐

  1. 汇编学习(1)——基础知识

    汇编学习(1)--基础知识 ---谨以此系列文章记录我的汇编学习.  关于汇编 说起汇编语言,那自然不得不想到机器语言,在汇编语言尚未诞生之际,程序猿们只能非常苦逼的敲着0和1,还要记住一大堆复杂难记 ...

  2. 8086汇编学习小记-王爽汇编语言实验12

    8086汇编学习小记-王爽汇编语言实验12 0号中断处理程序,开始安装在0000:0200处的程序最后用死循环导致显示不出'divided error',改成直接退出就正常显示了.注意修改ss,sp之 ...

  3. 寄存器---汇编学习笔记

    第二章 寄存器 2.0 寄存器的绪论 一个典型的CPU由运算器.控制器.寄存器(CPU工作原理)等器件构成.内部总线实现 CPU 内部各个器件之间的联系,外部总线实现CPU和主板其他器件的联系. 在C ...

  4. 8086汇编学习小记-1

    8086汇编学习小记-1 View Code assume cs : codesg, ds : datasg, ss : stacksgdatasg SEGMENT... datasg ENDSsta ...

  5. 8086汇编学习之[BX],CX寄存器与loop指令,ES寄存器等

    同类学习笔记总结: (一).8086汇编学习之基础知识.通用寄存器.CS/IP寄存器与Debug的使用 (二).8086汇编学习之DS寄存器.SS/SP寄存器 一.汇编程序的基本格式: 1.基本格式与 ...

  6. FAQ7: 如何正确的对待汇编学习和反汇编学习?

    FAQ7: 如何正确的对待汇编学习和反汇编学习? 答: 首先要学会正确的学习方式.       学习汇编的正确方式: 1> 建议以 王爽汇编这本教材 为初级入门书籍                ...

  7. SHU汇编程序设计常见考点、易错点总结与综合实例、汇编学习资源

    文章目录 SHU汇编程序设计常见考点.易错点总结与综合实例.汇编学习资源 一.常见考点 1.寻址方式 2.移位 3.乘除运算 4.加减操作 5.取址操作 6.出入栈 7.中断 8.标志位 9.常见的字 ...

  8. 15 计算机底层——二进制到汇编学习

    计算机底层--二进制到汇编学习 1.概述 语言 机制 进制如何计算 二进制 数据宽度 有符号和无符号数 原码和反码 位运算 位运算计算 汇编 寄存器 内存 汇编指令 内存复制 堆栈的指令 汇编如何写函 ...

  9. 二进制到汇编学习-狂神说-雁迟

    [狂神说]最通俗易懂的计算机底层教学,二进制到汇编学习!视频地址:https://www.bilibili.com/video/BV1ni4y1G7B9 概述 语言 人和人沟通?语言!老外!计算机!学 ...

  10. android 编译汇编,【隋义】1.安卓图文教程之安卓环境下汇编学习

    本帖最后由 隋义 于 2014-10-6 23:14 编辑 有些朋友说看的有些晕,现视频教程版已发布!! 此教程献给新学习汇编的小菜鸟们(当然这其中也包括我啦! ),大牛勿吐槽也许你们也用得上!第一次 ...

最新文章

  1. 使用Python脚本批量裁切栅格
  2. gradient设置上下渐变_css3渐变之线性渐变linear-gradient
  3. 深入理解viewport
  4. .NET Core + Kubernetes:快速体验
  5. android播放html5视频,仅仅有声音没有图像视频
  6. [zz]很详细,涵盖了多数场景!推荐 - python 的日志logging模块学习
  7. 【VBA】修改Excle的标题
  8. 2010年会考计算机试题,2010年浙江省信息技术会考试题 选择题 - 多媒体 - 图文
  9. 自由技艺 (Liberal arts)
  10. 平凉锅盔西北美食的文化的传承之一
  11. Linux分卷压缩zip文件命令,Linux分卷压缩与解压缩
  12. 测量RT-Thread线程调度的时间的方法
  13. 解决微信电脑版备份的问题:当前网络状况复杂,请尝试使用其它网络
  14. linux开源软件推荐,10个Linux平台开源ERP软件推荐
  15. 云服务器 虚拟主机 故障,云虚拟主机重启服务器
  16. mydata97的日期控件
  17. 《Guava Floats类》学习笔记
  18. 配置 Java 开发环境
  19. golang实现一个带Web界面的五险一金计算器
  20. Thinkpad E440 windows 10 重装系统步骤记录

热门文章

  1. 【模糊PI控制(从原理到simulink仿真到C代码实现)】
  2. Python优缺点总结
  3. 第十一届蓝桥杯——JAVA组真题
  4. 智能车|直流电机、编码器与驱动器---编码器
  5. 安卓android studio传感器编程入门demo读懂就通1分钟跑通掌握最多需要三十分钟
  6. C++ 字符替换方法总结(附示例代码)。
  7. 李开复给大学生的第四封信—大学四年应是这样度过
  8. deepstream源码
  9. 野火i.MX6ULL Linux开发板资料
  10. Postfix + Extmail 企业邮件服务器搭建