编写循环程序,用变址寻址交换数组中的数值对,每对中包含偶数个元素。即,元素i与元素i+1交换,元素i加2与元素i+3交换,以此类推

ExitProcess proto
.data
tuantuan qword 12h,34h,56h,78h,90h,10h
qq qword 12h,23h,34h
.code
main proc
mov rcx,3
mov rdi,lengthof tuantuan
mov rax,0
L1:
mov rax,tuantuan
xchg [rdi+type tuantuan],rax
mov[rdi],rax
L2:
add tuantuan,8
add rdi,8
loop L1
loop L2
mov ecx,0
call ExitProcess
main endp
end0x00007FF67988106C 处有未经处理的异常(在 ***的程序three.exe 中): 0xC0000005: 写入位置 0x000000000000000E 时发生访问冲突
程序调试成功,但是出现上述冲突后程序终止
...全文
509 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
翻翻你的棋 2019-10-11
  • 打赏
  • 举报
回复
第二loop是多余的
  • 打赏
  • 举报
回复
引用 6 楼 早打大打打核战争 的回复:
单循环就可以了(未测试):
mov rcx, lengthof tuantuan
lea rdi, tuantuan
shr rcx, 1
L1:
mov rax, [rdi]
xchg rax, [rdi+type tuantuan]
mov [rdi[, rax
add rdi, (type tuantuan) * 2
loop L1
初学者,很多伪指令还不知道,谢谢了
  • 打赏
  • 举报
回复
单循环就可以了(未测试):
mov rcx, lengthof tuantuan
lea rdi, tuantuan
shr rcx, 1
L1:
mov rax, [rdi]
xchg rax, [rdi+type tuantuan]
mov [rdi[, rax
add rdi, (type tuantuan) * 2
loop L1
zara 2019-10-04
  • 打赏
  • 举报
回复
那就调试程序里看看啊,出错时究竟访问哪里,怎么就有问题了和自己预想的不一样。手头没这环境,具体的说不出来了。
  • 打赏
  • 举报
回复
引用 1 楼 zara 的回复:
没看出来两层循环的意义,但只有一个 mov rcx, 3 肯定不对,内层 loop 退出循环时 rcx 为 0,再外层 loop rcx 就成无限大了,必然出错。
更改后在L1的第二行中止
  • 打赏
  • 举报
回复
引用 1 楼 zara 的回复:
没看出来两层循环的意义,但只有一个 mov rcx, 3 肯定不对,内层 loop 退出循环时 rcx 为 0,再外层 loop rcx 就成无限大了,必然出错。
该成一个循环依然中止
  • 打赏
  • 举报
回复
mov rcx,3
mov rdi,lengthof tuantuan
mov rax,0
L1:
mov rax,tuantuan
xchg [rdi+type tuantuan],rax
mov[rdi],rax
add tuantuan,8
add rdi,8
loop L1
zara 2019-10-04
  • 打赏
  • 举报
回复
没看出来两层循环的意义,但只有一个 mov rcx, 3 肯定不对,内层 loop 退出循环时 rcx 为 0,再外层 loop rcx 就成无限大了,必然出错。

21,458

社区成员

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

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