x86相关内容
我的下一个code: MOV AX,@数据 MOV DS,AX 为什么我不能写就这样? MOV DS,@数据 所有的源: .MODEL小 .STACK 100H 。数据 HelloMessage DB“你好,世界”13,10,“$” 。code 。启动 MOV AX,@数据 MOV DS,AX MOV啊,9 MOV DX,OFFSE
..
这不可能是简单的,但并不做什么改变。 我有我使用的是看,如果光驱将弹出一个简单的code 在code是用汇编语言,英特尔NASM的语法。 [位16] [ORG 0X07C00] STI喷射:MOV啊,46H MOV人,00H MOV DL,00H INT 13Hendprogram: 次510 - ($ - $$)0分贝 将0x55分贝 DB和0xAA 我可以简单地增加驱动器号,
..
我写一个内核模块,它是关于阅读和写作的MSR。我写了一个简单的程序进行测试,但它仍然失败。所有它做的是写MSR,然后回读。这里是code: 静态INT __init test3_init(无效) { uint32_t的HI,LO; 喜= 0; LO = 0XB; ASM挥发性(“MOV%0 %% EAX”::“R”(LO)); ASM挥发性(“MOV%0 %% E
..
我有指向一个地址,并在我的情况字节的变量写大小麻烦。这给我的错误“错误:无效的有效地址”: 字节MOV [AX],字节为0x0 一些试错后,我测试相同,但与EAX。这将编译就好了:字节MOV [EAX],字节为0x0 我是什么在这里失踪? 解决方案 [AX] 是一个无效的内存操作数规格。 在有效的16位的是: [常量]结果 [BX]结果 [SI]结果 [二]结果 [BX +
..
我使用MASM32来编译和Windows 7的链接,这工作只是低于code罚款。然而调用stdout不是简单地印在我的命令提示符下任何东西。我究竟做错了什么? .386.MODEL平,STDCALL 选项casemap:无 包括C:\\ MASM32 \\包括\\ windows.inc 包括C:\\ MASM32 \\包括\\ kernel32.inc 包括
..
我有这些前pressions: cltd idivl(ECX%) 除以当 INT 和 MOVL $ 0%EDX DIVL(ECX%) 分的当无符号长 cltd 解决方案 IDIV 进行签署师, DIV 执行无符号除法。
..
我试图完成与ASM以下内容: MOV [00A30020],[EBX + 50] 所以,我想 MOV 的价值EBX + 50 进入00A30020,但是编译器说,这是一个无效的声明。 解决方案 有作为一个的内存的没有这样的事的内存的移动(与 MOV ,里面还有移动字符串)。请参见此表。 您可以加载 [EBX + 50] 在一个寄存器,然后储存,或做 推DWORD [EBX + 50
..
在 讲话香草萨特 在第2页幻灯片的身影:
..
对于至强融核编译时,以下code抛出 错误:不支持cmovc k1om 但它确实正确编译为一个普通至强处理器。 #包括LT&;&stdio.h中GT; 诠释的main() { int类型= 5; int位= 1; INT X = 0,Y = 1; INT和放大器; inRef =中; 的printf(“在=%d个\\ N”中); ASM(“锁B
..
我使用TASM 1.4。 我试图改变的背景和文本的颜色不清除previous文本,但它总是尽管颜色变清previous文本结束。 例如: MOV啊,09H LEA DX,文本1 INT 21H;显示文本1 MOV啊,01H INT 21H;我输入一个字符 MOV啊,06H MOV BH,42小时 MOV CX,0000H MOV DX,184fh 诠释10H;我用这个来改变文字和背景颜色
..
我写了一个宏以 E,NE,A,B ...作为一个参数,并即单个命令 MOV EAX,EBX 如果条件由preceding设置这将执行 CMP 操作是真实的。 一个例子调用会是什么样子。 CMP BX,20 mDoIf E,<调用姆preGS> 我遇到的问题是,当我尝试用下面的定义编译我得到两个错误之一。随着本地的定义,我得到一个未定义的符号错误:?? 0000 。当我删除本地
..
我与MASM工作,我以前遇到过的情景,我不容易理解如何解决,例如: X =(A)/(C * D) 如果我多C *Ð第一,我的价值是DX:AX据我所知,我不能使用,作为除数。如果我做单独的司A / C和A / D,我冒丢失precision(从提醒等)的风险。什么是实现这个的最佳方式? 解决方案 当你正确地指出,你不能用一个32位的数字为16位除法除数,但由于我们只关心这样做整数除法,这
..
我试图赋予变量在这里注册的是code: ORG 100H VAR1 DB 10; VAR2 DB 20; MOV BX,VAR1;错误:操作数不匹配:16位寄存器和8位地址 RET 结束 但是,如果换用4号线: MOV BL,VAR1; 它的工作原理。所以我的问题是,为什么不能我谨 8位的变量到更大的16位寄存器? 我已经提到
..
我试图找出如何从ASM指令,进入C ++中的变量拉寄存器值。 例如:MOV DWORD PTR DS:[ESI],EDI (假设值EDI认为是一个int)int值= EDI; 解决方案 取决于你的编译器。搜索“内联汇编”,您使用的编译器。例如用VC ++ int32_t X; _asm MOV X,EAX; (可能是__asm)。 GNU使用不同的语法
..
下面的程序编译没有错误,但运行时不会提示任何输入和任何打印。有什么问题,我怎么能解决这个问题? 我使用这些命令汇编和链接: 的/ usr / local / bin目录/ NASM -f macho32 $ 1 LD -macosx_version_min 10.9.0 -lSystem -o运行$ filename.o -e _start -lc 我的code是:部分。数据 ;新
..
预期下code不工作: .intel_syntax没有preFIX .arch I386 。数据 你好,世界: .ascii的“Hello world!\\ n” hello_world_end: .EQU hello_world_len,hello_world_end - 参考hello world 。文本 。全球_start _开始: MOV EBX,1 MOV ECX,参考hello
..
我有以下疑问: 正如我们所知道的System V ABI X86-64给了我们关于一个固定大小的区域(128字节)的堆栈帧,所谓的redzone后面。 所以,作为一个结果,我们并不需要使用,例如,子RSP,12 。只要 MOV [RSP-12,X 而这一切。 但我不能掌握这一想法。为什么这有关系?是否有必要子RSP,12 没有redzone后面?毕竟,堆栈大小在一开始的限制,为什么子RSP,
..
我已经看过汇编code几转储和有这部分(发现这里和
..
我是新来的x86汇编,我想了解本文档中的code:的 http://www.cs.cmu.edu/~410-s07/p4/p4-boot.pdf 3页: MOVW $×1234,斧头% MOVW%斧,DS% MOVW $ 0x5678的,BX% #下面的指令是一样的“MOVW $ 0x1337,(BX%)”。 MOVW $ 0x1337,DS%(%BX)#场所0x1337存储器字0x179
..
我学习x86汇编,我试图做一个玩具的操作系统在NASM,但我不明白一些事情。 我做了一个引导程序被成功引导我的内核: 负载从包含的内核文件的软盘14个行业; 搜索标记这些部门的文件 kernel.feo ; 的文件到内存偏移为0x2000 负载; 执行使用远跳 JMP为0x2000内核:0×0000 所以,我必须位于内核code为0x2000:0 在记忆中。 CS 可能是正确的
..