补全DATA SEGMENT BLOCK DB 01H,88H,02H,10H,0A0H,12H,91H,15H,08H,0C3H,0A0H,12H,91H,15H,08H,0C3H BUFF1 DB 16 DUP(0) BUFF2 DB 16 DUP(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,BLOCK ;数据区 LEA DI,BUFF1 ;正数缓冲区 LEA BX,BUFF2 ;负数缓冲区 MOV CX,60 CLD LOP: LODSB ;将 SI 指示的源数据取到 AL ? AL,80H ;测数据的最高位 JNZ ? ;测试结果不为 0,即负数 STOSB ;否则,存入正数区(串存储指令) ? AGAIN FU: ? BX,DI ;交换目的地址 STOSB XCHG BX,? ;还原目的地址 AGAIN: LOOP ? JMP $ CODE ENDS END START
时间: 2023-09-11 15:08:41 浏览: 96
补全的代码如下:
```
DATA SEGMENT
BLOCK DB 01H,88H,02H,10H,0A0H,12H,91H,15H,08H,0C3H,0A0H,12H,91H,15H,08H,0C3H
BUFF1 DB 16 DUP(0)
BUFF2 DB 16 DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA SI,BLOCK ; 数据区
LEA DI,BUFF1 ; 正数缓冲区
LEA BX,BUFF2 ; 负数缓冲区
MOV CX,16 ; 待处理的字节数
CLD
LOP:
LODSB ; 将 SI 指示的源数据取到 AL
TEST AL,80H ; 测数据的最高位
JZ NEG ; 测试结果为 0,即正数
MOV [BX],AL ; 存入负数缓冲区
INC BX
JMP AGAIN
NEG:
MOV [DI],AL ; 存入正数缓冲区
INC DI
AGAIN:
LOOP LOP
JMP $
CODE ENDS
END START
```
这个程序将原来的60改为了16,因为BLOCK数组中只有16个字节。此外,还将缺失的指令补全,其中TEST指令用于判断高位是否为0,JZ指令用于跳转到处理正数的代码块,MOV指令用于将数据存储到相应的缓冲区中。
阅读全文