在内存BUFF开始的单元中有十个带符号的字节型数据,正数存放到PLUS的缓冲区,负数存放到minus的缓冲区,编写完整的汇编语言源程序
您好,我思考了一会,使用Win32汇编语言实现了你的需求,您看下吧。
DATA SEGMENT
BUFF DB 5, -2, 9, -7, 0, 3, -6, -1, 8, -4
PLUS DB 10 DUP(?)
MINUS DB 10 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV SI, OFFSET BUFF
MOV DI, OFFSET PLUS
MOV BX, OFFSET MINUS
MOV CX, 10
LOOP_START:
MOV AL, [SI]
CMP AL, 0
JGE POSITIVE
MOV [BX], AL
INC BX
JMP NEXT
POSITIVE:
MOV [DI], AL
INC DI
NEXT:
INC SI
LOOP LOOP_START
MOV AH, 4CH
INT 21H
CODE ENDS
END START
作为一名二进制安全专业人员,十余年的老司机,看到汇编就已经迫不及待地翻译一遍了,给你翻译后的代码。
#include <stdio.h>
#define SIZE 10
int main() {
char buff[SIZE] = {5, -2, 9, -7, 0, 3, -6, -1, 8, -4};
char plus[SIZE];
char minus[SIZE];
int plusIndex = 0;
int minusIndex = 0;
for (int i = 0; i < SIZE; i++) {
if (buff[i] < 0) {
minus[minusIndex] = buff[i];
minusIndex++;
} else {
plus[plusIndex] = buff[i];
plusIndex++;
}
}
printf("PLUS: ");
for (int i = 0; i < plusIndex; i++) {
printf("%d ", plus[i]);
}
printf("\nMINUS: ");
for (int i = 0; i < minusIndex; i++) {
printf("%d ", minus[i]);
}
return 0;
}