汇编语言 4-20 设一存储区中放有 10 个带符号的单字节数( -10, 15H,20H,-1,-23,46H,16H,-33H,65H,88H) , 现要求分别求出其绝对值后存放到原单元中,试编写出汇编源程序。
时间: 2023-08-13 14:03:47 浏览: 90
以下是汇编源程序:
```
ORG 100H ;程序起始地址
MOV CX, 10 ;循环计数器初始化为10,表示有10个数需要处理
MOV SI, 0 ;指向第一个数的偏移量为0
LOOP_START:
MOV AL, [SI] ;将当前数值读入寄存器AL
CMP AL, 0 ;判断当前数值是否为0
JGE POSITIVE ;若是非负数则跳转到POSITIVE标签
NEG AL ;否则将寄存器AL中的数值取反
MOV [SI], AL ;将处理后的数值存储回原单元
POSITIVE:
INC SI ;指向下一个数的偏移量
LOOP LOOP_START ;继续循环处理下一个数
RET ;程序结束
```
注:本程序假设存储区的起始地址为100H,每个数占用一个字节。对于每个数值,先判断其是否为非负数,若是则跳转到POSITIVE标签,否则取反后存储回原单元。处理完当前数值后,指向下一个数的偏移量增加1,继续循环处理下一个数。
相关问题
编写程序实现以下功能:已知从ccc单元开始存有10个8位带符号数,要求统计其中负数的个数放在NEGA字节单元,并显示在CRT上
以下是一种可能的实现方式,使用汇编语言编写:
```
ORG 0x0
START:
; 初始化计数器
MOV BX, 0
; 遍历数组
MOV SI, ccc ; SI 指向数组起始位置
MOV CX, 10 ; CX 为数组长度
LOOP:
MOV AL, [SI] ; 取出数组元素
CMP AL, 0 ; 判断是否为负数
JNS NOT_NEGA ; 不是负数则跳过
INC BX ; 计数器加一
NOT_NEGA:
INC SI ; 指向下一个数组元素
LOOP LOOP ; 循环遍历数组
; 将负数的个数存入 NEGA 字节单元
MOV [NEGA], BL
; 显示负数的个数在 CRT 上
MOV AH, 02H ; 功能号 02H 表示显示字符
MOV DL, BL ; DL 存储要显示的字符
INT 21H ; 调用 DOS 中断显示字符
; 程序结束
INT 20H ; 调用 DOS 中断结束程序
; 数据区
ccc DB -1, 2, 0, -3, 4, 5, -6, 7, 8, -9 ; 数组起始位置
NEGA DB 0 ; 存储负数的个数
```
该程序首先初始化计数器 `BX` 为 0,然后遍历数组,对于每个元素,判断其是否为负数,如果是则将计数器加一。遍历完成后,将计数器的值存入 `NEGA` 字节单元中,然后使用 DOS 中断显示负数的个数在 CRT 上。注意,这个程序假设要使用 DOS 中断来显示字符,如果要在其他操作系统或环境下运行,则需要相应地修改显示部分的代码。
阅读全文