将6000H开始的区域中的100个数的第1个与第100个求和,第2与第99........

dongjiutiao 2009-12-10 01:31:49
将6000H开始的区域中的100个数的第1个与第100个求和,第2与第99........

这是不是要用堆?

如这样的
PUSH EBP
MOV EBP,ESP
SUB ESP,8
MOV DWORD PTR [ESP-4],10
MOV DWORD PTR [ESP-8],20
MOV DWORD PTR [ESP-12],30
MOV DWORD PTR [ESP-16],40
MOV DWORD PTR [ESP-20],50

那怎么相加啊???
...全文
85 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
suchx 2009-12-15
  • 打赏
  • 举报
回复
你要把ax送入一个结果数组内保存起来先
dongjiutiao 2009-12-10
  • 打赏
  • 举报
回复
这是我的注解看看对不

push ds ;ds压入堆栈
push es ;es压入堆栈
mov ax,6000h ; 地址6000h
mov ds,ax ;6000地址放入段寄存器
mov es,ax ;6000地址放入ES
mov si,0 ;源变址寄存器SI清零
mov di,99 ;目标变址寄存器99
push cx ;cx压栈
mov cx,50 ;循环计数器
s:xor ax,ax ;ax清零
mov al,[si] ;si和di相加结果放入ah
add al,[di]
adc ah,0
inc si ;循环一次si加一
dec di ;循环一次di减一
loop s ;跳转至s
pop cx ;恢复计数器
pop es ;恢复段寄存器
pop ds ;恢复段寄存器

si和di都是ds段吧?
dongjiutiao 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 suchx 的回复:]
不好意思上面貌似有问题

              push   ds  
              push   es  
              mov   ax,6000h  
              mov   ds,ax  
              mov   es,ax  
              mov   si,0  
              mov   di,99  
              push   cx
              mov   cx,50
          s:xor   ax,ax
              mov   al,[si]  
              add   al,[di]  
              adc   ah,0
              ;把ax送入结果
              inc   si  
              dec   di  
              loop   s
              pop   cx
              pop   es  
              pop   ds
[/Quote]
这个没问题吧
dongjiutiao 2009-12-10
  • 打赏
  • 举报
回复
loop @b 好像是32位的跳转吧

我记忆以前写过一个局部变量的加减法和这个差不多找不到了
lhdwy 2009-12-10
  • 打赏
  • 举报
回复
出了点小错
pushad
mov eax,6000h
lea ebx,[eax+99*4]
mov ecx,50
@@:
mov edx,[ebx]
add [eax],edx
inc eax
inc eax
inc eax
inc eax
dec ebx
dec ebx
dec ebx
dec ebx
loop @b
popad
suchx 2009-12-10
  • 打赏
  • 举报
回复
我说我的第一个回复有问题
suchx 2009-12-10
  • 打赏
  • 举报
回复
不好意思上面貌似有问题

push ds
push es
mov ax,6000h
mov ds,ax
mov es,ax
mov si,0
mov di,99
push cx
mov cx,50
s:xor ax,ax
mov al,[si]
add al,[di]
adc ah,0
;把ax送入结果
inc si
dec di
loop s
pop cx
pop es
pop ds
lhdwy 2009-12-10
  • 打赏
  • 举报
回复
pushad
mov eax,6000h
mov ebx,6063h
mov ecx,50
@@:
mov edx,[ebx]
add [eax],edx
inc eax
dec ebx
loop @b
popad
suchx 2009-12-10
  • 打赏
  • 举报
回复
我只用过16位的汇编,就是这样啊
push ds
push es
mov ax,6000h
mov ds,ax
mov es,ax
mov si,0
mov di,99
mov ax,[si]
add ax,[di]
inc si
dec di
pop es
pop ds
dongjiutiao 2009-12-10
  • 打赏
  • 举报
回复
楼上的的意思是让我向上移动指针?

这里是ESP-20就弄成ESP+20。大概是着这个意思吗?注意:我说的是大概
大熊猫侯佩 2009-12-10
  • 打赏
  • 举报
回复
n从1累加到50
从n可以确定m = 101 - n

伪代码如下:

for(n = 1;n<51;++n)
x = ary[n]+ary[101-n];
pla_007 2009-12-10
  • 打赏
  • 举报
回复
DS:ESI
ES:EDI

用这2个作指针,分别指向头尾。
然后根据取的数据的长度将 ESI、EDI作相应的加减即可!循环50次完毕!

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧