MASM

Assembly x86 program. Counting numbers in an input

…衆ロ難τιáo~ 提交于 2020-05-09 17:13:32
问题 Hello I am just learning assembly so I don't really understand many things yet. I have to write a program where the user inputs some kind of line of various letters numbers etc. And the program should count how many numbers there are in the input and print the counter out. Here is my code: .model small .stack 100h .data buffer db 100, ?, 100 dup (0) count db 0 .code start: mov ax, @data mov ds, ax mov dx, offset buffer mov ah, 0Ah int 21h mov ah, buffer xor si, si xor cx, cx .loop: .notdigit:

Creating an x86 assembler program that converts an integer to a 16-bit binary string of 0's and 1's

核能气质少年 提交于 2020-05-09 06:57:46
问题 As the question suggests, I have to write a MASM program to convert an integer to binary. I have tried many different approaches, but none of them helped me at all. The final code I'm working on is as follows. I get an access memory violation error when I debug my code in Visual Studio . Any help on how to solve the error and if I'm on the right track or not will be greatly appreciated. The first code is my C++ code which passes a char array to an .asm file to be converted to binary. #include

JMP to absolute address (op codes)

风格不统一 提交于 2020-05-07 12:19:50
问题 I'm trying to code a exe packer/protector as a way of learning more about assembler, c++, and how PE files work. I've currently got it working so the section containing the EP is XORed with a key and a new section is created that contains my decryption code. Everything works out great except when I try and JMP to the original EP after decryption. Basically I do this: DWORD originalEntryPoint = optionalHeader->AddressOfEntryPoint; // -- snip -- // crypted.put(0xE9); crypted.write((char*)

汇编语言——标志寄存器

只愿长相守 提交于 2020-05-06 23:40:27
标志寄存器 flag 和其他寄存器不一样,其他寄存器是用来存放数据的,都是整个寄存器具有一个含义。 而flag寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息。 8086CPU的flag寄存器的结构: ZF标志 flag的第6位是ZF,零标志位(zero flag)。 它记录相关指令( add、sub、mul、div、inc、or、and 操作)执行后, 结果是否为0 。ZF = 1结果不为0,ZF = 0结果为0。 mov、push、pop 等传送指令不修改标志寄存器的信息。 PF标志 flag的第2位是PF,奇偶标志位。 它记录指令执行后,结果的所有 二进制位中1的个数是否为偶数 ,如果为偶数则PF = 1,为奇数,PF = 0。 SF标志 flag的第7位是SF,符号标志位。 它记录指令执行后,结果 是否为负(就是看它二进制的第一位是不是1) ,如果为负数则SF = 1,结果为正,SF = 0。 例如: 我们可以将add指令进行的运算当作 无符号数 的运算,那么add指令相当于计算129+1,结果为130(10000010B), 也可以将add指令进行的运算当作 有符号数 的运算,那么add指令相当于计算-(125+1)(补码=-(原码取反+1)),结果为-126(10000010B)。 CF标志 flag的第0位是CF,进位标志位。 一般情况下

Windbg命令的语法规则系列(一)

╄→гoц情女王★ 提交于 2020-05-05 20:03:18
本文介绍使用调试器命令必须遵循的语法规则。使用Windbg调试时,应遵守以下一般语法规则: 您可以在命令和参数中使用大小写字母的任意组合,除非在本节的主题中特别指出。 可以用一个或多个空格或逗号(,)分隔多个命令参数。 通常可以省略命令与其第一个参数之间的空格。如果这种省略不会造成任何歧义,则可以经常省略其他空格。 阅读本文中的命令引用注意以下事项: 粗体字体的字符表示必须逐字键入的项目。 斜体字体的字符表示参考主题“参数”部分中解释的参数。 括号([xxx])中的参数是可选的。带有竖线([XXX|YYY])的括号表示可以使用一个或无一个封闭参数。 带竖线(XXX|YYY)的大括号表示必须仅使用其中一个封闭参数。 一、数字表达式 调试器接受两个不同类型的数值表达式: C++表达式 和 MASM 表达式 。 每个这些表达式遵循用于输入和输出自己语法规则。 1.1、 MASM 数字和运算符 在Windows包的4.0版调试工具之前,ntsd、cdb、kd和windbg仅使用Microsoft宏汇编程序(masm)表达式语法。 MASM表达式中的数字 在masm表达式中我们可以输入二进制、八进制、十进制、十六进制数字。 使用n(设置基数)命令将默认基数设置为16、10或8。 所有未固定的数字都将在此基数中解释。 可以通过指定0x前缀(十六进制)、0n前缀(十进制)、0t前缀(八进制

dosbox+masm5.0编译汇编文件

陌路散爱 提交于 2020-04-28 05:03:58
在去年写过如何bc3.1编译ucos,不过现在很少去用到,但是那是用dosbox也是懵懵懂懂的,参见https://blog.csdn.net/liming0931/article/details/82320088 随着c语言使用的不断熟悉,偶尔看到一篇pdf,是姚新颜写的《c语言的标准和实现》,里面有提到如果要深入学习c语言,要懂点x86的汇编,之前我增加学过51的汇编,多多少少有点理解,就是x86的很多寄存器和51的不一样,自然界联想到了王爽的《汇编语言》第三版,那么学习之前要有汇编的编译环境,网上有虚拟机+dos的方案,但是我用过dosbox,那么不用费尽安装虚拟机,因为我的老电脑已经带不动了,但是dosbox肯定没问题的,所以就使用了这个方案。 网上下载的masm5.0和debug.exe,dosbox下载最新版,和之前不会冲突,这样我之前的配置文件依然有效,会有两个conf文件,这样我0.74.3用学习汇编,0.74.2学习ucos,互不干扰。 在C:\Users\Administrator\AppData\Local\DOSBox下会有 dosbox-0.74-3.conf文件。很不错哦~~ 末尾添加如下: [autoexec] # Lines in this section will be run at startup. # You can put your

Mac OS环境下DOSBox汇编环境的搭建

早过忘川 提交于 2020-04-28 05:03:43
平台: mac 工具: DOSBox(点击下载 DOSBox官网 ) debug、edit、link、masm等等(点击下载 masm汇编开发工具,提取码: skc8 ) 步骤: 1 .安装DOSBox: 解压下载到的DOSBox,把里面的文件复制到mac的应用程序(application)文件夹中的DOSBox。 2.配置dosbox: 打开安装好的DOSBox如下图,此时默认是Z盘目录下,你可以输入dir命令,就可以看到基本的东西。 切回finder中,在mac中你自己的用户目录(~)下建立一个文件夹,命名为DOSBox。 说明:这个文件夹名字是放在自己方便的路径下,这里我放在用户家目录下。 再这个DOSBox的文件夹里放入debug.exe,edit.exe之类下载好的东西。 然后DOSBox界面,输入mount c ~/DOSBox 。 说明:注意c后面是有空格的,~代表mac用户目录。 3.使用DOSBox工具: mount了之后,输入c:回车,就可以进入~/DOSBox路径下了。 这个时候你再输入dir命令回车,就能看见DOSBox里面的debug.exe,masm.exe之类文件,一共4个。 如果没看到,退出DOSBox工具,重新打开,再mount c ~/DOSBox 就能看到了。 4.好了现在就可以用输入debug命令回车,进入debug界面尝试写程序了。 后续

windows10下搭建汇编语言开发环境

百般思念 提交于 2020-04-28 05:03:18
1 工具准备 1)下载DOSBOX 工具介绍:DOSBox 是一个 DOS 模拟程序,由于它采用的是 SDL 库,所以可以很方便的移植到其他的平台。目前,DOSBox 已经支持在 Windows、Linux、Mac OS X、BeOS 、palmOS、Android 、webOS、os/2等系统中运行。不少DOS下的游戏都可以直接在该平台上运行。 工具官网:http://www.dosbox.com/ 项目主页:http://sourceforge.net/projects/dosbox/ 下载链接:http://sourceforge.net/projects/dosbox/files/dosbox/0.74/DOSBox0.74-win32-installer.exe/download(32位) 2)下载MASM32 工具介绍:MASM32是国外的MASM爱好者Steve Hutchesson自行整理和编写的一个软件包,目前最高版本为11r版。MASM32并非指Microsoft的MASM宏汇编器,而是包含了不同版本工具组建的汇编开发工具包。它的汇编编译器是MASM6.0以上版本中的Ml.exe,资源编译器是Microsoft Visual Studio中的Rc.exe,32位链接器是Microsoft Visual Studio中的Link.exe

8086汇编语言学习(二) 8086汇编开发环境搭建和Debug模式介绍

て烟熏妆下的殇ゞ 提交于 2020-04-28 04:06:30
1. 8086汇编开发环境搭建   在上篇博客中简单的介绍了8086汇编语言。工欲善其事,必先利其器,在8086汇编语言正式开始学习之前,先介绍一下如何搭建8086汇编的开发环境。   汇编语言设计之初是用于在没有操作系统的裸机上直接操作硬件的,但对于大部分人来说,在8086裸机上直接进行编程将会面临各种困难。好在我们可以使用软件模拟器来模拟硬件进行8086的学习实践。在《汇编语言》中作者推荐通过windows环境下的 masm 和 debug 进行学习。 masm介绍:    masm 是一款DOS下的汇编工具包,在8086汇编的学习中我们需要其中的几个文件,分别是 masm.exe , link.exe 。    masm.exe 汇编器,用于将文本格式的汇编语言源文件编译为.obj结尾的二进制文件,其生成的.obj结尾的二进制目标文件是被编译的源文件的对应的机器码。单独的源程序目标文件通常是无法直接运行的,还需要和互相依赖的其它同样编译完成的二进制文件 链接 在一起才能生成最终的可执行文件( 比如所需要的静态库函数 ) 。因此,obj文件通常也被叫做中间文件。    link.exe 链接器,obj文件需要通过链接才能转换成可执行程序,而链接器就是负责完成这一任务的。链接器能将多个obj目标文件以及其所依赖的库程序进行统一处理(例如多个目标文件中指令、数据内存地址的偏移处理)

masm的IDE环境

生来就可爱ヽ(ⅴ<●) 提交于 2020-04-05 22:15:44
masm有自带IDE环境:qeditor 注意:在include/includelib时要写完整路径 .386 .model flat,stdcall option casemap:none ;include include <E:\masm32/include/windows.inc> include <E:\masm32/include/user32.inc> includelib <E:\masm32/lib/user32.lib> include <E:\masm32/include/kernel32.inc> includelib <E:\masm32/lib/kernel32.lib> ; data .data szCpation db 'A Messagebox!',0 szText db 'Hello world!',0 ; code .code start: invoke MessageBox,NULL,offset szText, offset szCpation, MB_OK invoke ExitProcess,NULL end start 来源: oschina 链接: https://my.oschina.net/Heisenberg/blog/3213759