CODE SEGMENT
ASSUME CS:CODE
BUF DB 100 DUP() ; 这100个数 你自己设定
N EQU $-BUF
X DB 0
Z DW 0
Y DW 0
START: PUSH CS ; 设定 ds、es 与 cs相同
POP DS
PUSH CS
POP ES
LEA SI,BUF ; 取缓冲区偏移到 si
MOV CX,N ; 设置循环计数器
CLD ; 清方向标志
MOV BX,0 ; 设置 累加变量 初值
@1:
LODSB ; 装入数据到 al
CBW ; 扩展为 字
ADD BX,AX ; 累加
CMP AX,0
JG @2
JL @3
JMP @4
@2:
ADD Z,AX ; 加正数
JMP @4
@3:
ADD Y,AX ; 加负数
@4:
LOOP @1
MOV AX,BX ; 累加 值 转到 ax
MOV BL,N ; 设置除数
IDIV BL ; 带符号 除法
MOV X,AL ; 保存商
MOV AH,4CH
INT 21H
CODE ENDS
END START
data segment
Buf dw 1,3,0,-34,-56,78,90h,-10h,93h,100
Buf1 dw 10 dup
Buf2 dw 10 dup
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
mov es,ax
mov bX,offset Buf1 ;buf1首地址给si
mov si,bx
mov bX,offset Buf2 ;buf2首地址给di
mov di,bx
mov bX,offset Buf ;buf首地址给bx
mov cx,10 ;10个数
work: mov ax,[bx]
cmp ax,0
JL Neg
posz:mov [si],ax ;正数情况
inc si
inc si ;正数送到[Si],即buf1缓冲区,然后si+2,指向下一位置
jmp nextd
neg:mov [di],ax ;负数情况
inc di
inc di ;正数送到[di],即buf2缓冲区,然后di+2,指向下一位置
next: inc bx
inc bx
loop work ;循环10次
mov ax,4c00h
int 21h
code ends
end start
没有说清楚啊,应该是BUF中第一个不是零的地方插入要存放的字符串吧?
char insertbuf(char src,char dest,int count)
{
char ptmp = src;
int length = strlen(src);
while((ptmp != '0') && (ptmp != '\0'))
{
ptmp++;
}
if(ptmp == '\0')
return src;
char ptag = ptmp;
while(ptmp != '\0')
{
(ptmp+count) = ptmp;
++ptmp;
}
while(int i = 0; i < count; ++i)
{
ptag=dest;
++ptag;
++dest;
}
return src;
}
;
MOVE PROC
PUSH AX
PUSH SI
____PUSH DI_________ ;(1)
PUSH CX
MOV CX, 100
LEA SI, BUF1
LEA DI, BUF2
L: MOV AX, [SI]
____MOV [DI], AX___ ;(2)
____ADD SI, 2______ ;(3)
ADD DI, 2
____LOOP L__________ ;(4)
POP CX
POP DI
____POP SI_________ ;(5)
POP AX
RET
MOVE ENDP
保证正确。
以上就是关于在内存地址为BUFF开始的单元存放有100个字节的带符号数。编一程序求其平均值并将结果存于x单元;汇编语言全部的内容,包括:在内存地址为BUFF开始的单元存放有100个字节的带符号数。编一程序求其平均值并将结果存于x单元;汇编语言、【汇编语言程序设计】已知以Buf为首址的字存储单元中存放有10个符号的二进制数、已知从数据段BUF单元开始存放一个字符串,其长度在COUNT单元,请设计程序:如果第一个字符串不是零则插入等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)