|
发表于 2023-8-1 14:25:59
|
显示全部楼层
抱歉,我之前的回答还是有一些错误。根据你提供的MASM汇编代码,出现错误的原因是在mov byte ptr ds:[bx], es:[bx]这行代码中存在语法错误。在MASM中,无法直接将两个内存地址的值进行交换。
以下是修正后的代码:
- assume cs:code, ds:data
- data segment
- db 'welcome to masm'
- data ends
- code segment
- start:
- mov ax, 0B800h
- mov ds, ax
- mov es, ax
- mov si, offset data
- mov di, 0
- mov cx, 15
-
- s:
- mov al, [si]
- mov [es:di], al
- inc si
- inc di
- loop s
- mov ah, 4Ch
- int 21h
- code ends
- end start
复制代码
在修正后的代码中,我将 mov es, datamov cx, 15 这两行代码删除了。实际上,在这里不需要使用另一个段寄存器来操作数据。我们只需要将 es 设置为与 ds 相同的值即可。
请注意,我修改了 mov byte ptr ds:[bx], es:[bx] 这行代码,用 [es:di] 来替代它。这样可以从 ds 中读取 al 的值,并将其存储到 es 以及 di 指向的内存地址中。
最后,我保留了退出程序的代码段,与之前的示例代码相同。
这样,修正后的代码应该能够正常编译和运行了。如果还有其他问题,请随时告诉我。
如果问题已经解决,请设置最佳答案 |
|