汇编语言

【汇编语言】实验三

二次信任 提交于 2019-12-20 20:29:30
练习一:编写代码 用masm进行编译调试 可以得到结果为 :36 如果将line4的dl变为2,line9的dl变为5,我们再进行编译 可见结果变成了25!说明改动有效啦 用debug对生成的可执行文件 t1.exe 进行调试。 首先用r命令: 实验截图: 得到cs=076A,ds=075A,满足公式(cs)=(ds)+10H。 PSP(程序段前缀)的头两个字节是CD 20, 用debug查看PSP的内容,验证是否如此。 由此可见,确实如此 使用 u 命令对 t1.exe 进行反汇编,观察反汇编得到的源代码。 使用 t 命令和 p 命令(遇到 int 命令时,用 p 命令)单步调试,观察结果: 得到25。 练习2: 编写代码: 对源程序 t2.asm 进行汇编、连接、运行、调试 : 对t2.asm进行汇编、连接后,得到可执行文件t2.exe。运行t2.exe,观察程序运行 结果,验证是否在屏幕左上方出现红色的数值36。 注*)经测试,有些平台在 dosbox 下运行这个程序时有些问题,如果屏幕左上方没有 输出结果,请运行程序t2.exe前,先输入cls命令清空一下屏幕,然后再执行t2.exe。 重新打开t2.asm,尝试将源代码中line7的0433h→0432h, line10 的 0436h→0439h, 然后重新汇编、连接,得到可执行文件 t2.exe。使用 cls 命令清

汇编语言——基础知识

谁说我不能喝 提交于 2019-12-20 01:02:41
1.汇编语言和机器语言:机器语言是机器指令的集合。机器指令是一台机器可以正确执行的命令。不同处理器有其自有的机器语言。汇编语言的主体是汇编指令,而汇编指令是机器指令便于记忆的书写方式。 2.汇编语言指令包括:汇编指令,伪指令,其他符号 3.存储器:每个存储器分为若干单元,每个单元可以存储128个字节。      CPU可以将需要直接使用的命令放入寄存器中。      在存储器中指令和数据没有任何区别,都是二进制信息。      在一台PC机中,装有多个存储器芯片。这些存储芯片从物理连接上看是独立的,不同的部件。从读写属性上看又分为两类: 随机存储器(RAM) 和 只读存储器(ROM) 。       随机存储器可读可写,但必须带电存储,关机后存储的内容丢失。只读存储器只能读取不能写入,关机后其中的内容不丢失。这些存储器从功能上又可以分为以下几类:        (1)随机存储器 用于存放供CPU使用的绝大部分程序和数据,主随机存储器一般由两个位置上的RAM组成,装在主板上RAM和插在扩展插槽上的RAM。 (2)装有BIOS的ROM BIOS是由主板和各类接口卡(如显卡、网卡等)厂商提供的软件系统,可以通过它利用该硬件设备进行最基本的输入输出。在主板和某些接口卡上插有存储相应BIOS的ROM。 例如,主板上的ROM中存储着主板的BIOS;显卡上的ROM中存储着显卡的BIOS

编程语言分类

走远了吗. 提交于 2019-12-18 09:57:01
[TOC] 目录: 一 引子 二 编程语言分类: 2.1 机器语言 2.2 汇编语言 2.3 高级语言 2.3.1 编译型 (如C语言) 2.3.2 解释型 (如Python) 2.4 总结 #一 引子 ​ 基于上一章所学,有了计算机硬件,再在硬件之上安装好操作系统,我们就有了一个应用程序的运行平台,我们接下来的任务就是学习如何使用某款编程语言来开发应用程序。 ​ 本章的主题是先带大家了解下编程语言,然后重点介绍python这门编程语言 插图:恶搞图01 二 编程语言分类: 2.1 机器语言 机器语言是站在计算机(奴隶)的角度,说计算机能听懂/理解的语言,而计算机能直接理解的就是二进制指令,所以机器语言就是直接用二进制编程,这意味着机器语言是直接操作硬件的,因此机器语言属于低级语言,此处的低级指的是底层、贴近计算机硬件(贴近代指需要详细了解计算机硬件细节、直接控制硬件),详解如下 #机器语言 用二进制代码0和1描述的指令称为机器指令,由于计算机内部是基于二进制指令工作的,所以机器语言是直接控制计算机硬件。 用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码以及代码的含义,然后在编写程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作。编写程序花费的时间往往是实际运行时间的几十倍或几百倍

2 编程语言

北城以北 提交于 2019-12-18 08:16:09
编程语言 ​ 编程语言(英语:programming language),是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。 编程语言的分类 机器语言 机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点。不同种类的计算机其机器语言是不相通的,按某种计算机的机器指令编制的程序不能在另一种计算机上执行 机器语言是微处理器理解和使用的用于控制它的操作的二进制代码。 8086到Pentium的机器语言指令长度可以从1字节到13字节。 尽管机器语言看似非常复杂,但它是有规律的。 现今存在着超过100000种机器语言的指令 汇编语言 汇编语言是一种用于电子计算机,微处理器,微控制器,或其他可编程器件的低级语言。在不同的设备中,汇编语言对应着的不同机器语言指令集。汇编一种语言专用于某种计算机系统-结构,而许多不像高级语言,可以在不同系统平台之间移植。 高级语言 高级语言是大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等

汇编语言笔记05-[bx]和loop指令

自古美人都是妖i 提交于 2019-12-18 08:14:14
转载必须注明出处,违者必究。 http://www.cnblogs.com/dennisOne debug 和汇编编译器masm对指令的不同处理 debug masm debug 和编译器对[idata]有这不同的解释。 debug 将 "[idata]" 是一个内存单元, "idata" 是内存单元的偏移地址;而编译器将 "[idata]" 解释为 "idata" 。 解决之道 可以使用两种方式解决: (1). 指定段地址 mov al,ds:[0] 含义: (al)=((ds)*16+0) ,将内存单元中的数据送入 al 中; mov al,ds:[bx] 含义: (al)=((ds)*16+(bx)) ,将内存单元中的数据送入 al 中。 (2). 使用 [bx] mov al,[bx] 含义:同 "mov al, ds:[bx]" 相同。 loop 指令 指令格式: loop 标号 CPU 在执行 loop 指令要进行两步操作: (1). (cx) = (cx)-1 (2). 判断 cx 中的值,不为零则转至标号处执行程序,如果为 0 则向下执行。 loop 指令的基本结构 计算: 2^12 1 assume cs:code 2 code segment 3 start: mov ax, 2 4 mov cx, 11 5 s: add ax, ax 6 loop s 7 8

汇编语言常见的错误

喜你入骨 提交于 2019-12-18 08:09:59
一些常见的错误描述 错误编号 错误描述 0 Block nesting error 嵌套出错.嵌套的过程,段,结构,宏指令或重复块等非正常结束.例如在嵌套语句中有外层的结束语句,而无 内层的结束语局 1 Extra characters on line 一语句行有多余字符,可能是语句中给出的参数太多 2 Internal error-Register already defined 这是一个内部错误.如出现该错误,请记下发生错误的条件,并使用Product Assistance Request 表与 Microsoft公司联系 3 Unkown type specifer 未知的类型说明符.例如类型字符拼错,把BYTE写成BIT,NEAR写成NAER等 4 Redefinition of symbol 符号重定义.同一标识符在两个位置上定义.在汇编第一遍扫描时,在这个标识符的第二个定义位置上给出 这个错误 5 Symbol is multidefined 符号多重定义.同一标识符在两个位置上定义.在汇编第二遍扫描时,每当遇到这个标识符都给出这个错误 6 Phase error between passes 两次扫描间的遍错.一个标号在二次扫描时得到不同的地址值,就会给出这种错误.若在启动MASM时使用/D 任选项,产生第一遍扫描的列表文件,它可帮助你查找这种错误 7 Already

汇编语言程序设计学习笔记(第一遍学习)-第1节:机器语言编程到汇编语言的产生

柔情痞子 提交于 2019-12-18 08:09:39
  大家好!今天是我学习汇编语言的第一课。我感觉汇编好好玩啊! 机器码编程   哇! 一上来就写程序了啊,还是用机器码的啊!是呢!嘿嘿!我们去下载1个二进制编辑器,我也不知道哪款好用点,我下载的是FlexHEX。然后我们打开它,并写入一下代码:CD 00 以前我学C语言的时候,我知道CD 00 其实就是1100 1101 0000 0000啦!然后我们保存它为1个文件。关于文件名随便取啦!然后我们运行打开cmd,我们把刚才编辑保存好的文件拖到cmd中然后再运行! 哇!程序输出了Divide overflow 好棒啊!一上来就可以机器码编程啦!而且只有2字节呀!看起来也不是那么的复杂啊!但是我看下面的程序,下面的程序是welcome to masm的机器码: 大家看到了吗?!好多的01011001啊,要是我们写二进制机器码的时候1个被错误的写成0了,那如何去调试查找啊,所以汇编语言产生了哦!汇编语言它的主题是汇编指令,汇编指令呢只是机器指令便于书写记忆的一种格式。比如:机器指令1000100111011000 它的意思是寄存器BX的内容送到AX中,对于的汇编指令是:MOV AX,BX。大家看,这样的写法是不是更接近人类语言呀!(咦!什么是寄存器啊,这里怎么冒出来个寄存器,寄存器是CPU中可以存储数据的器件,一个CPU中有多个寄存器,AX,BX就是其中2个寄存器的代号)

汇编语言学习笔记——————第一个程序

喜欢而已 提交于 2019-12-18 04:17:15
一个汇编语言从写出到最终执行的简要过程 大体分为以下三步: 1.编写汇编源程序 2.对源程序进行编译连接 3.执行可执行文件中的程序 第二步执行的操作是使用汇编语言编译程序对源程序文件中的源程序进行编译,产生目标文件;再用链接程序对目标文件进行连接,生成可在操作系统中直接运行的可执行文件。 第三步中,操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载到内存,设置CS:IP指向第一条要执行的指令,然后由CPU执行程序。 下图是从汇编程序从写出到执行的详细步骤。 编写 1.asm 编译MASM 1.obj 连接LINK 1.exe 加载command 内存中的程序 运行CPU 编译链接 编译 为了使得我们编写的汇编语言程序得以执行,我们必须有相应的编译器和链接器,这里我们需要下载对应的三个文件,分别是MASM.exe、LINK.exe,ML.exe三个文件,对应的百度云链接如下: 链接: https://pan.baidu.com/s/15k0PZSgvO9JrAmilZ5U4Kg . 提取码:aswr 将下载的文件统一的放到一个文件夹下,如下图所示: 将三个文件拷贝至文件夹下就可以编译链表了,编译链接操作这里采用win10命令行窗口的方法进行编译和链接。编译链接前的文件下只有三个刚拷贝进来的文件,一个.asm文件和debug.exe(下面解释)

汇编语言学习

廉价感情. 提交于 2019-12-17 07:56:25
将汇编语言程序转换为机器语言程序的转换工具叫做汇编程序; 将高级语言程序转换为机器语言程序的转换工具叫做编译程序; 高级语言与低级语言的划分依据在于是否直接操作计算机硬件,其中机器语言与汇编语言称为低级语言,其余均为高级语言 常用数制的规定标志:B——二进制;D——十进制;O——八进制;H——十六进制; 来源: CSDN 作者: zhe19940910 链接: https://blog.csdn.net/zhe19940910/article/details/103510679

汇编语言(二)之将十进制数的ASCⅡ码转换为BCD码

爷,独闯天下 提交于 2019-12-16 01:13:46
题目要求 从键盘输入五位十进制数的ASCⅡ码,存放于3500h其实的内存单元中,将其转换为BCD码后,再按位分别存入350Ah起始的内存单元内。若输入的不是十进制ASCⅡ码,则对应存放结果的单元内容为FF。 代码 .model small .data org 3500h;从3500h开始作为变量的首地址 num1 db 31h,32h,33h,34h,35h org 350ah num2 db 5 dup(0) .code start: mov ax,@data mov ds,ax;之后数据全部数据堆栈 mov si,offset num1;3500地址给offset mov di,offset num2 mov cx,5; change: mov al,[si] cmp al,39h ja iserror cmp al,30h jb iserror sub al,30h mov [di],al;mov [350ah],al jmp changeloop iserror: mov bx,0ffh mov [di],bx changeloop: add si,1 add di,1 loop change mov ah,4ch int 21h end start 运行截图 来源: CSDN 作者: 少年豪放Star 链接: https://blog.csdn.net