|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- assume cs:code,ds:data
- data segment;数据段
- db 'welcome to masm'
- data ends
-
- code segment
- start:
- mov ax, 0B800h
- mov ds, ax
-
- mov si,data
-
- mov cx,15
-
- mov bx, 0
- s:mov byte ptr [bx], si:[bx]
- inc bx
- loop s
-
-
- code ends
- end start
复制代码
我的问题 :masm时,提示有1处 severe 错误 ?
根据你提供的MASM汇编代码,出现错误的原因是在 mov byte ptr [bx], si:[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 si, offset data ; 将数据段的偏移地址赋给si寄存器
- mov di, 0 ; 目标地址,这里设置为0
- mov cx, 15 ; 循环计数器
- s:
- mov al, [si] ; 从si指向的地址读取一个字节
- mov es:[di], al ; 将读取的字节存储到es:di指向的地址
- inc si ; 增加源地址
- inc di ; 增加目标地址
- loop s ; 循环,直到cx计数器为0
- mov ah, 4Ch
- int 21h
- code ends
- end start
复制代码
在修正后的代码中,我添加了一个新的寄存器 di作为目标地址,使用 mov al, [si]将源地址 si 中的数据读取到寄存器 al 中,并通过 mov es:[di], al将数据存储到目标地址 es:di 中。然后,我增加了对源地址 si 和目标地址 di 的递增操作,以及使用 loop指令来实现循环。最后,我添加了一个退出程序的代码段,在这个例子中使用了INT 21h功能调用。
请注意,在汇编语言中,你需要确保正确设置段寄存器(如在 mov ax, 0B800h和 mov ds, ax中所示),并使用合适的偏移地址来访问数据段(如在 mov si, offset data中所示)。
如果问题已经解决,请设置最佳答案
|
|