|
发表于 2023-8-1 14:18:32
|
显示全部楼层
根据你提供的代码,存在一处严重错误。在指令mov byte ptr [bx], si:[bx]中,使用了si作为源操作数的寄存器。在MASM汇编语言中,不允许直
接将寄存器作为内存操作数的前缀。正确的写法是使用ds:si来指定源操作数的内存地址。
下面是修改后的代码:
- assembly
- assume cs:code, ds:data
- data segment
- db 'welcome to masm'
- data ends
- code segment
- start:
- mov ax, 0B800h
- mov ds, ax
- mov si, offset data ; 使用offset获取数据段的偏移地址
- mov cx, 15
- xor bx, bx ; 将bx清零
- s:
- mov al, byte ptr [si+bx] ; 从ds:si+bx的地址读取数据
- mov byte ptr [bx], al ; 将数据存储到ds:bx的地址
- inc bx
- loop s
- code ends
- end start
复制代码
这样修正后的代码应该可以解决你遇到的问题。
值得注意的是,上述代码将字符串中的前15个字符复制到显存地址 0B800h 开始的位置,其中每个字符占两个字节。如果你想复制整个字符串,可以将 mov cx, 15 修改为 mov cx, 14,或者根据实际字符串长度进行修改。另外,xor bx, bx 可以用来将 bx 寄存器清零,在每次循环开始时重新设置偏移地址。
球一个最佳答案谢谢啦!这对我非常重要!   |
|