汇编新手请教一个初级题目

chanchaw 2013-08-16 08:52:16
题目:
定义数据X1,把X1的第三个字节内容存入AL中

我的解题:

assume cs:code,ds:data
data segment
x1 db 1,2,3,4
data ends

code segment
start:
    lea ax,x1
    mov al,ax+2
code ends
end start



出现问题:
在CMD中使用ml test.asm
出现错误提示:must be index or base register


要如何解决这个错误
万分感谢.
...全文
127 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chanchaw 2013-08-16
  • 打赏
  • 举报
回复
是的,应该是+总括号的 +了之后对了 不过还有点你们都没有提出的 就是在在使用lea之前要: mov ax,data mov ds,ax 这样才是把定义的数据段内的数据放到了其对应的内存地址上去 在之后的mov al,[si+2] 才可以获取预期的数值. 编译通过,验证正确的完整代码应该是:

assume cs:code,ds:data
data segment
x2 db 'abcdef'
x1 db 1,2,3,4,5,6,7,8,9,9,8
data ends

code segment
start:
	mov ax,data
	mov ds,ax
	lea di,x1
	mov al,[di+3]

	mov ax,4c00h
	int 21h
code ends
end start
zara 2013-08-16
  • 打赏
  • 举报
回复
si+2 应该是 [si+2] 吧,仔细看下上面的示例。外加方括号,表明其中结果为所操作的内存地址,否则就是直接对寄存器本身进行操作了。
chanchaw 2013-08-16
  • 打赏
  • 举报
回复
修改为如下代码: (ax替换为si/di都是一样的错误提示)

assume cs:code,ds:data
data segment
x1 db 1,2,3,4
data ends

code segment
start:
	lea si,x1
	mov al,si+2

	mov ax,4c00h
	int 21h
code ends
end start
使用ml test.asm 出现错误提示:invalid use of register 请教如何解决
zara 2013-08-16
  • 打赏
  • 举报
回复
错误提示不是说了必须用索引或基址寄存器吗,将 ax 改为使用 si/di 或 bx 就是了,如:
mov  bx, offset x1
mov al, [bx+2]

21,458

社区成员

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

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