8086汇编语言习题

在内存的3000h开始存放了一组数(16个)。将其处理后存放到3010h开始的16个单元中,处理的规则是:正数不变,负数取反加1

您好,根据您的需求,给您一段代码。

如下所示,将从内存的3000h开始的16个数字进行处理,并将结果存储在3010h开始的16个单元中。正数保持不变,负数取反并加1。

ORG 100h

MOV SI, 3000h       ; 源数组的起始地址
MOV DI, 3010h       ; 目标数组的起始地址
MOV CX, 16          ; 数组长度

Process:
    MOV AL, [SI]     ; 从源数组中读取一个字节
    CMP AL, 0        ; 检查该字节的符号
    JNS Positive     ; 正数跳转到 Positive 标签

    ; 处理负数
    NEG AL           ; 取反
    ADD AL, 1        ; 加1
    JMP Continue

Positive:
    ; 处理正数
    ; 正数不变,直接存储到目标数组
    JMP Continue

Continue:
    MOV [DI], AL     ; 存储处理后的字节到目标数组
    INC SI           ; 源数组指针增加
    INC DI           ; 目标数组指针增加
    LOOP Process     ; 循环处理下一个字节

HLT                 ; 程序结束

END