masm相关内容
我想知道这段代码和汇编语言中的这段代码有什么区别: db 2 dup(1fh)b dw 1fh,1fh 我认为第二个代码更好,而且我不知道为什么他们首先要编号. 解决方案 第二行等效于 db 1fh,0,1fh,0 ,因为DW的每个arg都是一个字长的整数.(而x86是little-endian) 第一行等效于 db 1fh,1fh . 要使用DW进行此操作,请使用 d
..
我已经在网上搜索了所有内容,但是在以下说明和eax 38fh 中找不到"fh"的含义.我知道"h"代表十六进制,"d"代表十进制,但是我从未见过fh. 解决方案 如果Intel汇编程序(即 MASM )令牌以数字(0到9)开头,则假定为整个令牌是一个值.如果该值以 h 结尾,则汇编程序会认为它是 H 十进制. 在您的情况下, 38fh 以数字开头,因此假定它是一个值.在您的情况下,令
..
我正在使用MASM汇编,并且正在尝试编写一个逐字节处理字符串str1的循环,使用位操作将每个小写字母更改为相应的大写字母.如果这封信已经是大写字母,那就别说了.当我执行代码时,字符串str1似乎什么都没发生,并且我很难弄清为什么,也许我不应该这样处理我的数组,但是尽管如此,这还是代码: .386.模型平str1 dword"aBcD",cr,Lf,0.....代码_开始:输出str1** su
..
我在添加数组但在输入的索引上遇到一些麻烦.例如,用户输入4作为开始数组,输入6作为结束数组,因此我将不得不遍历array [4]到array [6]并包括在内.我不确定是否可以在ArraySum过程的.data中使用数组.我是否必须以某种方式将其推入程序? 我正在为此使用Kip Irvine的外部库. 我的代码在这里: TITLE作业7包含Irvine32.inc.数据str1 B
..
在某些x86汇编方言中,可以使用@@:放置匿名本地标签,并像jmp @F这样在跳转中引用它们,其中@F表示“下一个@@",而@B表示“上一个@@". 以下是我在网上搜索时发现的来自Microsoft的描述: Q33067:匿名标签跳转说明 我使用预处理器的宏工具今天,我对MASM在处理匿名本地标签方面的差异(如果有的话)感到好奇.但是,我找不到任何明确表明MASM支持多步引用的信息.我
..
我正在解决汇编语言编程以添加BCD数字和两个ASCII数字的基本问题, 就是因为我必须使用 DAA和AAA 指令,现在我试图将存储在AX寄存器中的结果存储到所需的内存位置,但没有得到以下代码为什么给我错误的提示立即模式非法 下面是我到目前为止编码的代码,请帮助我,如何消除此错误 PS:我想将结果移至所需的内存位置,而不是任何特殊用途的寄存器 假设CS:CODE,DS:DATA 数据段
..
我的汇编程序具有以下结构: BPB_FAT16 STRUCT ; Base BPB_FAT16. Size=0x19=25. BytesPerSector DW 0x0200 ; Size of HW sector, usualy 512. SectorsPerCluster DB 0x01 ; Valid values 1,
..
我注意到在程序集段中使用了操作码. 示例: MOV DWORD PTR SS:[EBP-30],30 我认为"PTR SS:"用于指定EBP-30来自堆栈吗? (SS:堆栈段) 我是对的还是我完全错了? :)而且,能否请您告诉我上面的示例与 之间的区别 MOV DWORD PTR[EBP-30],30 那么操作码中使用的DS(数据段)呢? 解决方案 MOV DWOR
..
我正在尝试找出c ++上的gcc内联汇编.以下代码适用于不带%和其他操作数的Visual c ++,但我无法使其与gcc一起使用 void function(const char* text) { DWORD addr = (DWORD)text; DWORD fncAddr = 0x004169E0; asm( "push %0" "\n"
..
我正在使用MASM编译器和DOSBOX.我想将变量中的值保存到寄存器中.我想将num1值保存到cx寄存器中.我该怎么办? .MODEL SMALL .STACK 50H .DATA num1 db '5' NL DB 0DH, 0AH, '$' msg db ?,0AH,0DH,"Enter an odd number between
..
我在理解PTR运算符时遇到了一些问题,我可以轻松地将大内存移到下面的小寄存器示例中: ax = small register which is 2 byte memory = variable which is 4 byte .data variable dword 05010h .code mov ax,WORD PTR variable 它将正常工作. 现在我的问题是我不明白为
..
有没有更好的方法来打印hang子手形象? FIG0 DB 0DH,0AH,' +=======+',0DH,0AH,' |',0DH,0AH,' |',0DH,0AH,' |',0DH,0AH,' |',0DH,0AH,' |',0DH,0AH,' |',0DH,0AH,' ========
..
有一条printf语句,告诉编译器打印outStr. outStr最初设置为等于emptybuf [1000] ="???尚未翻译???";.我应该将答案移至outStr,后者应更新print语句中的outStr. 由于某种原因,我的内联程序集无法从下面显示的代码中打印出任何内容.我不明白我在做什么错.我正在尝试将小写字母转换为大写字母,并忽略任何特殊字符.任何建议都将不胜感激. mo
..
我想知道如何在MASM编译时获取结构的大小. 这是C的等效代码. struct Point { int x; int y; }; printf("Point Stucture size %d\n", sizeof(struct Point)); 解决方案 我假设您将在汇编代码中声明该结构. 根据masm32文档,您可以使用以下运算符给你: LENGTHOF v
..
这是我的代码: model small stack 100h .data string1 db "Khoa$" string2 db 4 dup(?) count dw 4 .code begin: mov ax,@data mov ds,ax mov es,ax mov cx,count mov si,0 mov di,0 add di,count dec di again: m
..
这次很简单的问题.我该如何编写屏幕程序集中单个寄存器内容的筛选?我对于只看一个寄存器的值而调用DumpRegs感到有些厌倦. 我正在使用x86体系结构,Visual Studio中的MASM和Irvine32.lib. 解决方案 Irvines的DumpReg反复使用Macros.inc宏:mShowRegister.可以直接使用.示例: INCLUDE Irvine32.in
..
我一直在尝试调用用masm制作的c库. 我已经从程序集MASM制作了一个.lib文件. 但我不知道如何将其称为C语言库. 这是.lib文件 https://www.dropbox.com/s/d9d8cjbxmo51yqg/main.lib 需要帮助. 谢谢 解决方案 哦,天哪.巨大的陷阱.在Visual Studio中的32位masm .asm文件中,“.model flat,c"
..
这是我要实现的目标: a_x*b_x + a_y*b_y + a_z*b_z 我正在尝试在装配中进行上述计算的宏. 我所有的数字都使用WORD.这是我的代码: dotProduct MACRO A_X,A_Y,A_Z,B_X,B_Y,B_Z ;a.b (a dot b) = a_x*b_x + a_y*b_y + a_z*b_z mov ah, A_X mo
..
我试图查看asm语言是否支持基于链接的功能,例如"C"语言.例如.我有"m.asm": assume cs:code code segment start: mov ax,20h call s mov ah,4ch int 21h code ends end start 其中"s"是源代码中不存在的符号,然后我有了n.asm文件来定义符号(实际上是标签) code
..
我怎么知道MASM是使用相对偏移还是绝对偏移对我的JMP指令进行编码? 我知道x86提供了相对和绝对偏移量的JMP操作码. 我想确定我的跳跃是相对的,但是我找不到任何合适的MASM文档来告诉我JMP @label是否实际上转换为相对跳跃. 请尽可能在答案中提供指向文档的链接. 对于相反的问题: 参见如何编码远为绝对的JMP/CALL如果您要尝试使MASM发出直接绝对远距离j
..