在内存地址为BUFF开始的单元存放有100个字节的带符号数。编一程序求其平均值并将结果存于x单元;汇编语言

在内存地址为BUFF开始的单元存放有100个字节的带符号数。编一程序求其平均值并将结果存于x单元;汇编语言,第1张

        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单元,请设计程序:如果第一个字符串不是零则插入等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9697645.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存