有两个bcd码存放在buf,将其转化为ASCII码存放在res开始的两个单元,并测试是否有0的ASCII码 写指令
时间: 2024-09-20 10:08:32 浏览: 36
汇编试验 (1)将 BUF开始的 10 个单元中的二进制数转换成两位十六进制数的 ASCII 码,在屏幕上显示出来。要求码型转换通过子程序 HEXAC实现,在转换过程中,通过子程序 DISP实现显示. (2)编程实现从键盘接受一个字符串,再从键盘接受一查找的字符(例如’g’) ,找到时提示’Yes,found !’,找不到时提示’No found !’ 。
4星 · 用户满意度95%
首先,我们假设`buf`是一个包含两个BCD码(二进制补码十进制表示法)的字符数组,而`res`是另一个用于存储转换后的ASCII码的数组。下面是将BCD码转化为ASCII码并检查是否包含0的步骤,这里以汇编语言为例:
```assembly
; 假设buf[0]和buf[1]存放的是BCD码,res[0]和res[1]预留给ASCII码
; 读取BCD码
mov al, [buf] ; AL = buf[0]
shl al, 4 ; 将低四位移至AL的高位(因为BCD码是4位)
or al, [buf+1] ; 合并两个字节形成一个16位数
; 转换为ASCII(0-9对应ASCII值从48到57)
cmp al, 0x0A ; 检查是否为0(ASCII 0对应的十进制数)
je no_zero ; 如果是0,则跳过转换直接处理下一个
add al, 0x30 ; 如果不是0,将BCD码加30(ASCII '0'的数值)
; 存储结果
mov [res], al ; res[0] = AL
no_zero:
inc buf ; 移动到下一个BCD码
mov al, [buf] ; AL = buf[1]
shl al, 4 ; 同上
or al, [buf+1] ; 合并
; 转换并检查是否为0
cmp al, 0x0A
je no_more ; 非0则继续
add al, 0x30
mov [res+1], al ; res[1] = AL
no_more:
; 接下来可以检查res[0]和res[1]是否含有0的ASCII码
```
阅读全文