实验 基础汇编语言程序设计 联系客服

发布时间 : 星期三 文章实验 基础汇编语言程序设计更新完毕开始阅读75d85bdb58fb770bf68a5593

在命令行提示符状态下输入: G 2020↙ 执行结果为: 0123456789

思考题: 类似的, 若要求在终端屏幕上输出'A' 到'Z' 共26 个英文字母,应如何修改例1 中给出的程序? 请验证之。

A 2020

2020:MVRD R2,001A ;送入输出字符个数26

2022:MVRD R0,0041 ;“A”字符的ASCII 码送寄存器R0 2024:OUT 80 ;输出保存在R0 低位字节的字符 2025:DEC R2 ;输出字符个数减1

2026:JRZ 202E ;判26 个字符输出完否,已完,则转到程序结束处 2027:PUSH R0 ;未完,保存R0 的值到堆栈中 2028:IN 81 ;查询接口状态,判字符串行输出完成否, 2029:SHR R0 ;

202A:JRNC 2028 ;未完成, 则循环等待

202B:POP R0 ;已完成, 准备输出下一字符并从堆栈恢复R0 的值 202C:INC R0 ;得到下一个要输出的字符 202D:JR 2024 ;转去输出字符 202E:RET 202F:↙

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

<1> 在命令行提示符状态下输入: A 2040↙ 屏幕将显示: 2040:

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

(2040)MVRD R2, 0030 ; 用于判数字符的下界值

MVRD R3, 0039 ;用于判数字符的上界值

(2044) IN 81 ; 判键盘上是否按了一个键,

SHR R0 ; 即串行口是否有了输入的字符 SHR R0

JRNC 2044 ; 没有输入则循环测试 IN 80 ; 输入字符到R0 MVRD R1,00FF

AND R0,R1 ;清零R0 的高位字节内容 CMP R0, R2 ; 判输入字符≥字符'0' 否 JRNC 2053 ; 为否, 则转到程序结束处

CMP R3, R0 ; 判输入字符≤字符'9' 否 JRNC 2053 ; 为否, 则转到程序结束处 OUT 80 ; 输出刚输入的数字符

JMPA 2044 ; 转去程序前边2044 处等待输入下一个字符 (2053) RET

<2> 在命令行提示符状态下输入: G 2040↙

光标闪烁等待键盘输入,若输入0-9 十个数字符,则在屏幕上回显;若输入非数字符,则屏幕不再显示该字符,出现命令提示符,等待新命令。

思考题, 本程序中为什么不必判别串行口输出完成否? 设计打入'A'~'Z'和'0'~'9' 的程序, 遇其它字符结束输入过程。

A 2040

(2040)MVRD R2, 0041 ; 用于判字母符的下界值

MVRD R3, 005A ;用于判字母符的上界值 MVRD R4,0030;用于判数字符的下界值 MVRD R5,0039;用于判数字符的下界值 MVRD R6, 0061 ; 用于判字母符的下界值 MVRD R7, 007A ;用于判字母符的上界值

(204C) IN 81 ; 判键盘上是否按了一个键,

SHR R0 ; 即串行口是否有了输入的字符 SHR R0

JRNC 204C ; 没有输入则循环测试 IN 80 ; 输入字符到R0 MVRD R1,00FF

AND R0,R1 ;清零R0 的高位字节内容

(2054)

CMP R0, R2 ; 判输入字符≥字符'A' 否 JRNC 205A ; 为否, 则转到程序结束处 CMP R3, R0 ; 判输入字符'Z'≥字符 否

JRNC 205A ; 为否, 则转到程序结束处 JMPA 2064

CMP R0, R6 ; 判输入字符≥字符'A' 否 JRNC 2060 ; 为否, 则转到程序结束处 CMP R7, R0 ; 判输入字符'Z'≥字符 否 JRNC 2060 ; 为否, 则转到程序结束处

(205A)

JMPA 2064

(2060)

CMP R0, R4 ; 判输入字符≥字符'0' 否 JRNC 2067 ; 为否, 则转到程序结束处 CMP R5, R0 ; 判输入字符≤字符'9' 否 JRNC 2067 ; 为否, 则转到程序结束处

(2064)

OUT 80 ; 输出刚输入的数字符

JMPA 204C ; 转去程序前边204C 处等待输入下一个字符

(2067) RET

8.设计一个小程序, 计算1 到100 的累加和。 A 2060

(2060)MVRD R1,0000;累加和R1初值为0

MVRD R2,0064;最大值为100 MVRD R3,0000;累加第一个数R3

(2066)INC R3;R3自增

ADD R1,R3

CMP R3,R2;判断R3>=R2 JRNZ 2066;否,跳至2066 RET