在屏幕上显示95个可打印字符

在命令行指示符状态下输入:A2000
屏幕将显示:
2000: 从内存的2000单元开始建立用户的程序
按照下面格式输入:
2000: MVRD R1,7E ;向寄存器传送直接数
2002 : MVRD RO, 20
2004: OUT 80 ;通过串行接口输出R0低位字节内容到显示器屏幕2005: PUSH RO ;保存RO寄存器的内容到堆栈中
2006: IN 81 ;读串行接口的状态寄存器的内容
2007: SHR RO : RO寄存器的内容右移一位,最低位移入标志C
2008: JRNC 2006 ;条件转移指令,标志位C≠1时就转到2006地址2009: POP RO :从堆栈中恢复R0寄存器的原内容
200A: CMP RO, R1 ; 比较两个寄存器的内容是否相同,相同则Z=1
200B: JRZ 2000 :条件转移指令,标志位Z为1时就转到2000地址200C: INC RO ;把R0寄存器的内容增加1
200E: JR 2004 ;无条件转移指令,- -定转移到2004地址
200F: RET: ;子程序返回指令,教学机程序也用RET指令结束
(复制粘贴即可)

好的,以下是一个简单的汇编程序,可以生成ASCII码表并显示屏幕上: ``` section .data ; 存储ASCII码表 ascii_table db "ASCII码表:", 0 db 0x0a, 0x0d ; 换行符和回车符 db "十进制\t十六进制\t字符", 0x0a, 0x0d ; 表头 db "------------------------------------------", 0x0a, 0x0d ; 分割线 section .text global _start _start: ; 显示ASCII码表标题 mov eax, 4 ; 4代表sys_write函数 mov ebx, 1 ; 1代表标准输出 mov ecx, ascii_table ; 存储了ASCII码表的字符串 mov edx, 14 ; 字符串的长度 int 0x80 ; 调用系统调用 ; 循环打印ASCII码表 mov ecx, 0 ; 初始化ecx寄存器为0 loop_start: mov eax, 4 ; 4代表sys_write函数 mov ebx, 1 ; 1代表标准输出 mov edx, 3 ; 每次输出3个字符 add ecx, 1 ; ecx加1 mov al, cl ; 把ecx的值移动到al寄存器 mov bl, cl ; 把ecx的值移动到bl寄存器 cmp cl, 127 ; 判断是否达到ASCII码表的结尾 je loop_end ; 如果达到结尾,跳转到loop_end mov ecx, char_table ; 存储了ASCII码表的字符 add ecx, eax ; ecx加上eax的值,指向下一个字符 int 0x80 ; 调用系统调用 jmp loop_start ; 跳转到loop_start loop_end: ; 退出程序 mov eax, 1 ; 1代表sys_exit函数 xor ebx, ebx ; 返回值为0 int 0x80 section .data ; 存储了ASCII码表的字符 char_table db " ", 0x0a, 0x0d ; 每个字符后面加一个换行符和回车符 ``` 请将以上代码保存为ASCII.asm文件,使用nasm编译器进行编译和链接,命令如下所示: ``` nasm -f elf32 ASCII.asm -o ASCII.o ld -m elf_i386 ASCII.o -o ASCII ``` 编译完成后,运行ASCII可执行文件,即可在屏幕上看到生成的ASCII码表。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值