汇编语言

基础知识

痞子三分冷 提交于 2019-12-03 14:06:36
机器语言: 展开来讲就是一台机器可以正确执行的命令,机器语言是机器指令的集合。 例如: 指令: 01010000 (PUSH AX) 电平脉冲: 但是机器语言也有弊端,全是二进制组成,难免会看错等等。 汇编语言的产生:正好是为了解决上面的问题 1、汇编语言的主体是汇编指令。 2、汇编指令和机器指令的差别在于指令的表示方法上。汇编指令是机器指令便于记忆的书写格式。 3、汇编指令是机器指令的助记符。 例如: 机器指令: 1000100111011000 汇编指令:MOV AX,BX 上面两步的操作的结果一样,将寄存器 BX的内容送到AX中 由此可见,汇编语言这样的写法与人类语言接近,便于阅读和记忆。 寄存器: 简单的讲是CPU中可以存储数据的器件,一个CPU中有多个寄存器,比如上面的AX,BX就是其中的一个寄存器的代号。 问题: 计算机只能识别机器语言,那要如何才能识别程序员用汇编语言写出来的东西呢? 答案: 通过相应的编译器来进行转换操作。 来源: https://www.cnblogs.com/zpchcbd/p/11798296.html

Linux 下学习汇编语言 方案一

一曲冷凌霜 提交于 2019-12-03 10:13:33
Linux 下学习80x86汇编语言 方案一 masm 使用书籍: 汇编语言 --王爽 软件: dosemu dosemu 里面已经包含 debug程序 并且把d盘设置为用户的home目录 下载站点: http://dosemu.com/ or apt-get install dosemu masm5.0: http://pan.baidu.com/s/1botG4XL Linux 下学习80x86汇编语言 方案二 -- nasm 学习站点 : http://www.mouseos.com http://www.nasm.us/doc/ 官方文档 这是一个中文版的nasm学习教程,里面介绍了怎么在linux里面编写操作系统 ,特此 感谢作者 http://docs.cs.up.ac.za/programming/asm/derick_tut/#helloworld 编译器: nasm apt-get install nasm or http://www.nasm.us 来源: oschina 链接: https://my.oschina.net/u/2247886/blog/632694

2019-2020 20191316《信息安全专业导论》第五周学习总结

此生再无相见时 提交于 2019-12-03 09:54:36
教材学习内容总结 这一周学习了各种指令格式,并在Pep/8上运行了小程序。知道了汇编语言。认识了伪代码,知道了如何测试程序 教材学习中的问题和解决过程 问题1:想多了解一下汇编语言及各种语言进化过程 解决方案:通过查资料我知道了早期的程序设计均使用机器语言。程序员们将用0, 1数字编成的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。但由于用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作。编写程序花费的时间往往是实际运行时间的几十倍或几百倍,而且,编出的程序全是些0和1的指令代码,直观性差,如果有错写也很难查找。所以汇编语言诞生了。汇编语言的主体是汇编指令。汇编指令和机器指令的差别在于指令的表示方法上,汇编指令是机器指令便于记忆的书写格式。我们用汇编语言编写程序,但计算机只认识机器指令,这时候就需要一个能将汇编语言转换成机器指令的工具,就是编译器。程序员用汇编语言写出源代码,再用汇编编译器将其编译为机器码,最后由计算机执行。 汇编语言是直接面向处理器(Processor)的程序设计语言。处理器是在指令的控制下工作的,处理器可以识别的每一条指令称为机器指令

Topics in CS(difference between compile and interpret)

北城余情 提交于 2019-12-03 07:43:22
编译 Compile :把整个程序源代码翻译成另外一种代码,然后等待被执行,发生在运行之前,产物是「另一份代码」。 解释 Interpret :把程序源代码一行一行的读懂然后执行,发生在运行时,产物是「运行结果」。 高级语言代码 High-Level Code 高级语言代码,自然是指由高级编程语言编写代码,对计算机的细节有更高层次的抽象。 相对于低级编程语言(low-level programming language)更接近自然语言(人类的语言)。 集成一系列的自动工具(垃圾回收,内存管理等),会让程序员延长寿命,更快乐的编写出更简洁,更易读的程序代码。 低级语言代码 Low-Level Code 低级语言代码,指由低级编程语言编写的代码,相对高级语言,少了更多的抽象概念,更加接近于汇编或者机器指令。 但是这也意味着代码的可移植性很差。 在我看来,高与低,只是一组相对词而已。 越高级的语言,性能、自由度越不及低级语言。 但是在抽象、可读可写性、可移植性越比低级语言优秀。 在以前的年代,C/C++语言相对汇编语言,机器指令来说,肯定是高级语言。 而到了今天,我们更多人对C语言偏向认知为「低级语言」。 或许未来世界的开发者,看我们现在所熟悉的Java、PHP、Python、ECMAScript等等,都是「low」到爆的语言。 汇编语言 Assembly Language

《汇编语言》王爽——实验7

[亡魂溺海] 提交于 2019-12-03 05:23:43
1 assume cs:code, ds:data, es:table, ss:stacks 2 3 data segment 4 ;年份 5 db '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982', '1983' 6 db '1984', '1985', '1986', '1987', '1988', '1989', '1990', '1991', '1992' 7 db '1993', '1994', '1995' 8 ;收入 9 dd 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514 10 dd 345980, 590827, 803530, 1183000, 1843000, 2759000, 3753000, 4649000, 5937000 11 ;员工 12 dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635, 8226 13 dw 11542, 14430, 15257, 17800 14 data ends 15 16 table segment 17 db 21 dup ('year

编程语言的发展史

牧云@^-^@ 提交于 2019-12-03 04:28:06
计算机是基于电工作的(基于高,低电平) 1:机器语言: 优点:执行效率非常快 缺点:开发效率非常慢 2:汇编语言:(通过英文字符组成) 优点:执行效率相对于机器语言略低 缺点:开发效率相对于机器语言略高 3:高级语言 c c++ c# java php python go 优点:开发效率高 缺点:执行效率低 编译型:编译后才能使用 c c++ go 解释型:同声传译 c# python java(先编译后解释) 开发效率 (解释型>编译型)>汇编语言>机器语言 执行效率 (解释型<编译型)<汇编语言<机器语言 跨平台 解释型>编译型 学习难度 机器语言>汇编语言>高级语言 python解释器 IT行业的定律:一定不要下载最新版本(最新版不够稳定,使用中容易碰到奇怪的问题影响工作) python的版本分类: python2.x(2020年python社区停止技术支持) python3.x (主流使用学习版本) python执行代码的两种方式: 1:交互式 有来有往 2:命令行执行 python文件约定俗成将后缀名定义为.py 其实.py单纯的就是文本文件 胶水语言 IDE工具pycharm 专门用于编写python代码 优点:提升开发效率 缺点:比较占用内存的资源 注释: 单行注释 # 快捷键+? 多行注释 """ """ ''' ''' 变量 1:什么是变量? 变

第二次读汇编语言

南楼画角 提交于 2019-12-03 02:53:38
第一次读汇编语言的教材就是那本Kip Irvine dalao写的书, 比较急,因为赶着完成作业,只能囫囵吞枣了. 而最近用到汇编写点东西的时候总是感觉不是那么顺心, 于是就重新读了一遍基础知识,现在还只是读到了第三章(汇编语言基础知识), 大概这几天就会把这本书多翻阅几遍,以此来达到复习,提高的效果; 闲话少说,接下来就是我新发现的"知识点": 1. 以字母开头的十六进制数,必须加一个前置0 ,以防汇编器将其解释为标识符 2. 整形常量表达式只是在汇编时计算,同样的还有 伪指令 会有汇编器在汇编阶段将其汇编为相应的代替物 3. 预定义符号 如@data ,汇编时返回常量的整数值 4. 指令: [label:] mnemonic [operation] [;comment] 这是一个完整的指令的 ''原型''; 5. NOP指令 ------空指针 ,主要用处是为对其地址, Intel的芯片 在访问偶数的地址会快点. 6. 可执行文件 executable file 7. list 文件 地址 从程序内存起点算起(类似于段地址和偏移地址中的偏移地址) 8. db dw dd dq dt 是伪指令 10 BCD数据 Binary coded Decimal (二进制编码的十进制) 来源: https://www.cnblogs.com/love-coding/p/11774717

汇编语言标志位介绍

匿名 (未验证) 提交于 2019-12-03 00:36:02
一、运算结果标志位 1、进位标志CF(Carry Flag) 进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。 使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。 2、奇偶标志PF(Parity Flag) 奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。 利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。 3、辅助进位标志AF(Auxiliary Carry Flag) 在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0: (1)、在字操作时,发生低字节向高字节进位或借位时; (2)、在字节操作时,发生低4位向高4位进位或借位时。 对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、SF和OF的使用频率较高,而标志位PF和AF的使用频率较低。 4、零标志ZF(Zero Flag) 零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。 5、 符号标志SF(Sign Flag) 符号标志SF用来反映运算结果的符号位

ollydbg使用――反汇编入门

匿名 (未验证) 提交于 2019-12-03 00:34:01
反汇编需要汇编语言的基础,感觉可以同时学, ollydbg快捷键: F2――下断点,也就是指定断点的地址; F3――加载一个可执行程序,进行调试分析; F4――程序执行到光标处; F5――缩小还原当前窗口; F7――单步步入; F8――单步步过;(Ctrl+F8可以自动步过并设置断点) F9――直接运行程序,遇到断点处,程序暂停; Ctrl+F2――重新运行程序到起始处,一般用于重新调试程序; Ctrl+F9――执行到函数返回处,用于跳出函数实现; Alt+F9――执行到用户代码处,用于快速跳出系统函数; Ctrl+G――输入十六进制地址,快速定位到该地址处; 下面将要通过反汇编,改变程序的输出,举个例子: 先贴这次用的exe程序的C语言源码(非常简单的初学代码): #include <stdio.h> #include <stdlib.h> int main() { } 很显然,当我们输入a不为0时,就会输出YES,输入a=0时,就会输出NO,如下图: 用ollydbg打开这个exe程序, Ctrl+F8走到我们要调试的地方,并设置断点,手动设置的话,需要一步步按F8,走到需要调试的地方按F2设置断点: 红色说明已经设置了断点,然后我们再按Ctrl+F2重新载入一下,F9走到刚才设置的断点处: 按F7单步步入,进入 这里我们已经看到了程序输出的YES和NO,就不再试了

王爽《汇编语言》实验16

匿名 (未验证) 提交于 2019-12-03 00:28:02
assume cs:code,ss:stack stack segment db 128 dup (0) stack ends ;===============install new int7ch code segment start: mov ax,code mov ds,ax mov si,offset newint7ch mov ax,0 mov es,ax mov di,200h mov cx,offset newint7ch_end-offset newint7ch cld rep movsb cli mov word ptr es:[7ch*4],200h mov word ptr es:[7ch*4+2],0 sti ;-------------------------tset newint7ch mov ah,0 int 7ch call delay mov ah,1 mov al,2 int 7ch call delay mov ah,2 mov al,6 int 7ch call delay mov ah,3 int 7ch call delay mov ax,4c00h int 21h delay: push ax push dx mov dx,50h mov ax,0 delays: sub ax,1 sbb dx,0 cmp ax,0 jne delays