汇编语言

汇编语言

匿名 (未验证) 提交于 2019-12-03 00:21:02
基本术语 折叠 数据传输指令 它们在存贮器和 寄存器 、寄存器和输入输出端口之间传送数据。 1. 通用数据传送指令 MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. BSWAP 交换32位寄存器里字节的顺序 XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里 ) XLAT 字节查表转换. ―― BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL ) 2. 输入输出端口传送指令 . IN I/O端口输入. ( 语法: IN 累加器, { 端口号 │DX} ) OUT I/O端口输出. ( 语法: OUT

delphi反编译ded加密解密之反汇编工具

匿名 (未验证) 提交于 2019-12-02 23:52:01
原文链接: http://www.cnblogs.com/renyinyi/archive/2012/04/14/2446694.html   反汇编工具:我们借助反汇编工具可以将大部分的Win程序反汇编出他的汇编代码.对与高手来说,借助这些工具反汇编出的汇编语句可以将程序的源码还原出来,我们使用反汇编工具主要的目的就是来静态分析这款软件。找到关键处以方便我们下delphi反编译ded加密解密之反汇编工具一步的动态调试。   反汇编工具:我们借助反汇编工具可以将大部分的Win程序反汇编出他的汇编代码.对与高手来说,借助这些工具反汇编出的汇编语句可以将程序的源码还原出来,我们使用反汇编工具主要的目的就是来静态分析这款软件。找到关键处以方便我们下一步的动态调试。   目前在反汇编工具中,最强大的无疑是IDAPro,但是该工具对新手来说,快速掌握操不是一件易事,当你对破解有一定认识后推荐选用。W32Dasm以前是大家一直在用的一款工具,由于该软件作者停止更新 Dashboard 2012年4月 (1) ,加上搜索ASCII的功能我们使用OD的插件即可完成,所以一般很少再使用;在反汇编工具上还是要介绍一款国内密界高手CCGPII621的C32ASM,功能相当强大,国人写的软件对中文的支持当然更完美些,当我们使用OD的插件找不到关键字符时,不妨用这款工具试下,可能就会有意外的惊喜

DAY01

匿名 (未验证) 提交于 2019-12-02 23:49:02
1.程序:程序一词来源于生活,可以看做是完成某些事情的既定方式以及过程。可以将程序看成对一些系列动作的执行过程的描述。 2.计算机语言(Computer Language):是人与计算机之间通信的语言。它主要由一些指令组成,指令包含数字,符号和语法等内容。程序员可以通过这些指令指挥计算机工作。 3.计算机语言分类:计算机语言种类非常多,有: 机器语言 , 汇编语言 , 高级语言 三大类。计算机所能识别的语言只有 机器语言 ,但通常人们编程时不采用机器语言,因为机器语言都是有 0 和 1 组成的,不便于记忆和识别。目前通常使用的编程语言是 汇编语言 和 高级语言 , 汇编语言 采用了英文缩写的标识符,容易识别和记忆;而 高级语言 采用结晶人类的自然语言进行编程,进一步简化了程序的编写过程。

汇编语言学习:使用王爽写的《汇编语言》第三版(编程环境配置)

匿名 (未验证) 提交于 2019-12-02 23:43:01
汇编语言学习 参考书: 使用王爽写的《汇编语言》第三版 学习工具(win7 x64): 另外需要一款编辑器,用来编辑源程序,推荐sublime text。需要到这里下载支持汇编语法高亮的插件: https://github.com/Nessphoro/sublimeassembly 目录介绍 学习工具 :包含win7 64位下需要的工具:DOSBox 0.74安装包、masm.exe、link.exe、debug.exe experiment.asm :参考书上面的练习与实验(不全,但需要的代码都在里面) 64位windows7下DOSBox使用方法: step1: 新建文件夹(下面以 C:\coding\assembly-language-learning 为例) step2: 将 debug.exe 、 masm.exe 、 link.exe 放到 C:\coding\assembly-language-learning 文件夹下 step3: 打开DOSBox。这里可以看到Z:\DOSBox里的虚拟盘,我们采用mount命令将其转变到 C:\coding\assembly-language-learning 目录下,如果只是用这一次,可以直接在命令行中输入如下命令: Z:\> mount d C:\coding\assembly-language-learning Z:\>

汇编语言-第三版-王爽-课程设计

匿名 (未验证) 提交于 2019-12-02 23:43:01
课程设计1(p211)、 课程设计1(p211) # 执行结果 # code ; DATE: 20190614 ; DESCRIPTION: 在屏幕上按格式显示数据 assume cs:code data segment db 16 dup (0) ; 用于临时保存数据转字符串的结果 ; 年份 db '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982', '1983' db '1984', '1985', '1986', '1987', '1988', '1989', '1990', '1991', '1992' db '1993', '1994', '1995' ; 收入 dd 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97497, 140417, 197514 dd 345980, 590827, 803530, 1183000, 1843000, 2759000, 3753000, 4649000, 5937000 ; 雇员 dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635, 8226 dw 11542, 14430, 15257,

[bx]和loop指令

匿名 (未验证) 提交于 2019-12-02 23:42:01
要完整地描述一个内存单元,需要两种信息: 内存单元 内存单元的长度(类型) 在debug中可以直接使用 [0] 来代替 ds:0 但是在汇编语言中却不能够直接这样使用。只有两种选择: 将偏移地址放在bx寄存器,使用 [bx] 加上段前缀 描述性符号 () ,该符号标识一个内存地址指向的字/字节空间 约定符号idata标识常量 loop指令的格式是:loop标号,cpu执行loop指令的时候执行两部操作: (cx)=(cx)-1 判断cx中的值是否为0,为0则向下执行,否则转向标号处 所以一般cx中存放的即为循环的次数 cx和loop指令配合实现循环功能的要点: cx中存放循环次数 loop指令中的标号所标识地址要在前面 要循环执行的程序段要写在标号和loop指令的中间 如果需要直接执行完循环,则使用p执行loop指令,或者使用g指令执行loop指令的下一条指令。p指令的指令格式为 g 代码段偏移地址 ,他将跳到当前代码段和偏移地址组成的指令地址。 注意, 无论是使用p指令还是使用g指令,循环都会被执行完成 。 同时, 汇编语言源程序中,数据不能以字母开头 。 在汇编源程序中,如果使用指令访问一个内存单元,则在指令中必须用 [] 来表示内存单元于所在段的偏移地址,如果 [] 中为一个idata,则需要在其之前显式给出段寄存器。否则将认为idata。 如果在 [] 里使用寄存器

汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。

匿名 (未验证) 提交于 2019-12-02 23:32:01
题目介绍 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它! 题目分析 这是一个很简单的左移问题,自然就想到了队列,先进先出,然后左移的元素再加到队尾。详细内容请见源代码。 源代码 class Solution { public: string LeftRotateString(string str, int n) { queue<char> s; string result; for(int i=0;i<str.size();i++) { s.push(str[i]); } for(int j=0;j<n;j++) { char a=s.front(); s.push(a); s.pop(); } for(int k=0;k<str.size();k++) { char b=s.front(); result.push_back(b); s.pop(); } return result; } }; 文章来源: https://blog.csdn.net/qq_29462849/article/details/90234033

汇编语言(第三版)王爽著(实验十一)编写子程序

匿名 (未验证) 提交于 2019-12-02 23:32:01
一、 实验目的 编写子程序,掌握 cmp 指令和转移指令之间的关系,熟悉标志寄存器。 二、实验设备与环境 计算机 DOS 操作系统或 Windows 操作系统 MASM.EXE, LINK.EXE, DEBUG.COM 或宏汇编集成环境 MASM for Windows 集成实验环境 2015 三、实验内容、程序清单及运行结果 1.编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母,描述如下。 名称:letterc 功能:将以0结尾的字符串中的小写字母转变成大写字母 参数:ds:si指向字符串首地址 代码: DATAS SEGMENT db "Beginner's All-purpose Symbolic Instruction Code." ,0 DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START : mov ax,DATAS mov ds,ax mov si,0 ok: mov ah,4Ch letterc: mov ch,0 mov cl,ds:[si] ; 判断是否为零 cmp byte ptr [si],97 ; 大写 cmp byte ptr [si],122 ; Сд sub byte ptr [si],20h no: inc si CODES ENDS END START 思路: