汇编语言能不能向内存直接写数据 5
如题,movax,1000Hmovds,axmov[0],53有没有语法错误?mov[0],53一句没有语法问题,为什么都说有问题呢?x86系统默认把ds寄存器当作段寄存...
如题,
mov ax,1000H
mov ds,ax
mov [0],53
有没有语法错误?
mov [0],53
一句没有语法问题,为什么都说有问题呢?x86系统默认把ds寄存器当作段寄存器 展开
mov ax,1000H
mov ds,ax
mov [0],53
有没有语法错误?
mov [0],53
一句没有语法问题,为什么都说有问题呢?x86系统默认把ds寄存器当作段寄存器 展开
5个回答
展开全部
可以直接写内存,但是为保证万一,一般直接写到安全区域(0:200~0:2FF),否则系统会有提示框。
上面这段程序在源程序中有语法错误,错误出现在指令mov [0],53,一是在源程序中,[0]被编译成0,所以指令会变成mov 0,53;这显然是错误的,再就是把一个立即数送存储单元时,要确定它的数据类型,即是字节传送还是字传送。如果是字节传送可改成:mov byte ptr ds:[0],53 如果是字传送,可改为:mov word ptr ds:[0],53,再就是程序中的标点符号应该是英文标点符号。
在debug里才是你补充里面所说的.你可以在源程序中试试.
上面这段程序在源程序中有语法错误,错误出现在指令mov [0],53,一是在源程序中,[0]被编译成0,所以指令会变成mov 0,53;这显然是错误的,再就是把一个立即数送存储单元时,要确定它的数据类型,即是字节传送还是字传送。如果是字节传送可改成:mov byte ptr ds:[0],53 如果是字传送,可改为:mov word ptr ds:[0],53,再就是程序中的标点符号应该是英文标点符号。
在debug里才是你补充里面所说的.你可以在源程序中试试.
展开全部
这段代码,从意思层面上很明了,就是要往1000:0000中写入53这个数。
首先,mov [0], 53有语法错误,x86不支持这种写法,正确的可能应该是:
mov ax, 53
mov bypte ptr [0], ax
其次,这段代码在x86实模式下的意思基本是明确的,就是写0x10000地址。
但是,在x86保护模式下,是有问题的。因为保护模式下段寄存器保存的是一个段选择子,而段选择子有严格的格式定义。0x1000明显不是一个合法的段选择子,因此这段代码在保护模式下运行会引发一般保护性错误(General protection fault).
首先,mov [0], 53有语法错误,x86不支持这种写法,正确的可能应该是:
mov ax, 53
mov bypte ptr [0], ax
其次,这段代码在x86实模式下的意思基本是明确的,就是写0x10000地址。
但是,在x86保护模式下,是有问题的。因为保护模式下段寄存器保存的是一个段选择子,而段选择子有严格的格式定义。0x1000明显不是一个合法的段选择子,因此这段代码在保护模式下运行会引发一般保护性错误(General protection fault).
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
DISPBXB PROC NEAR
MOV CX,16
LP:ROL BX,1
JC D1
MOV DL,30H
JMP OUTP
D1:MOV DL,31H
OUTP:MOV AH,2
INT 21H
LOOP LP
MOV DL,'B';显示字母“B”
MOV AH,2
INT 21H
RET
DISPBXB ENDP
套装(BX)= 7FFFH,输出格式0111111111111111B的的字符后面的字母B表示二进制的形式,显示的结果固定16。
MOV CX,16
LP:ROL BX,1
JC D1
MOV DL,30H
JMP OUTP
D1:MOV DL,31H
OUTP:MOV AH,2
INT 21H
LOOP LP
MOV DL,'B';显示字母“B”
MOV AH,2
INT 21H
RET
DISPBXB ENDP
套装(BX)= 7FFFH,输出格式0111111111111111B的的字符后面的字母B表示二进制的形式,显示的结果固定16。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为这句话有歧义,可以理解为mov byte ptr [0],53也可以理解为mov word ptr [0],53
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要显示指明段,比如ds:[0]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询