把 S_Data 为首地址的 100 个字节 数,第 1 个数乘 2 加第 2 个数的值存储到以 D_Data 为首地址的 50 个数的第1 个数保存,S_Data 第 3 个数乘 2 加第 4 个数的值存储到以 D_Data 为首地 址的 50 个数的第 2 个数保存, 以此类推。(要求有详细注释及流程图)
可参考
section .data
S_Data db 1, 2, 3, 4, ... ; 假设S_Data为100个字节数据
D_Data db 50 dup(0) ; 初始化D_Data为50个字节数据,初始值为0
section .text
global _start
_start:
mov ecx, 50 ; 循环50次,每次处理两个数
mov esi, S_Data ; S_Data的首地址
mov edi, D_Data ; D_Data的首地址
loop_start:
mov al, [esi] ; 获取S_Data的第一个数
mov bl, [esi + 1] ; 获取S_Data的第二个数
add al, al ; 第一个数乘以2
add al, bl ; 第一个数加上第二个数
mov dl, [esi + 2] ; 获取S_Data的第三个数
mov cl, [esi + 3] ; 获取S_Data的第四个数
add dl, dl ; 第三个数乘以2
add dl, cl ; 第三个数加上第四个数
mov [edi], al ; 结果保存到D_Data的第一个数
mov [edi + 1], dl ; 结果保存到D_Data的第二个数
add esi, 4 ; S_Data指针向后移动4个字节
add edi, 2 ; D_Data指针向后移动2个字节
loop loop_start
; 程序结束
mov eax, 1
xor ebx, ebx
int 0x80