汇编
汇编语言专栏
_n19hT
Don't limit yourself!
展开
-
汇编语言 | 实验16 编写包含多个功能子程序的中断例程
文章目录int7ch中断代码1.子程序1-清零测试:2.子程序2-设置前景色测试:3.子程序3-设置背景色测试:4.子程序4-向前滚动一行测试安装一个新的int 7ch中断例程,为显示输出提供如下功能子程序。清屏设置前景色设置背景色向上滚动一行入口参数说明如下:1.用ah寄存器传递功能号:0表示清屏,1表示设置前景色,2表示设置背景色,3表示向上滚动一行2.对于1、2号功能,用al传送颜色值,al的取值范围为1-7.注意这题用书上的方法我卡了好久。原因在于用table标号时,原创 2020-07-14 16:39:48 · 508 阅读 · 0 评论 -
汇编语言 | 第16章 直接定址表(含检测点16.1 16.2)
文章目录16.1 描述了单元长度的标号检测点16.116.2 在其他段中使用数据标号检测点16.216.3 直接定址表16.1 描述了单元长度的标号前面的课程中,我们一直在代码段中使用标号来标记指令、数据、段的起始地址。比如,下面的程序将code段中的a标号处的8个数据累加,结果存储到b标号处的字中。assume cs:codecode segment a db 1,2,3,4,5,6,7,8 b dw 0 start: mov si,0 mov cx,8 s: mov al,原创 2020-06-13 09:46:12 · 877 阅读 · 0 评论 -
汇编语言 | 实验15 安装新的int 9 中断例程
安装一个新的int 9中断例程,功能:在DOS下,按下"A"键后,除非不再松开,如果松开,就显示满屏幕的"A",其他的键照常处理。提示:按下一个键时产生的扫描码称为通码,松开一个键产生的扫描码称为断码。断码=通码+80h代码如下:ASSUME CS:CODES,ss:stackstack segment db 128 dup(0)stack endsCODES SEGMENTSTART: mov ax,stack mov ss,ax mov sp,1.原创 2020-06-11 11:52:10 · 343 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第十五章 外中断(检测点15.1)
文章目录15.1 接口芯片和端口15.2 外中断信息1.可屏蔽中断2.不可屏蔽中断15.3 PC机键盘的处理过程1.键盘输入2.引发9号中断3.执行int 9中断例程15.4 编写int 9中断例程15.1 接口芯片和端口15.2 外中断信息1.可屏蔽中断2.不可屏蔽中断15.3 PC机键盘的处理过程1.键盘输入2.引发9号中断3.执行int 9中断例程15.4 编写int 9中断例程键盘输入的处理过程:1.键盘产生扫描码2.扫描码送入60h端口3.引发9号中原创 2020-06-11 10:38:00 · 906 阅读 · 1 评论 -
汇编语言 | 实验14 访问CMOS RAM
编程,以"年/月/日 时:分:秒" 的格式,显示当前的日期、时间。实验代码:assume cs:code,ds:datadata segment db '2000/00/00 00:00:00',0 db 9,8,7,4,2,0data endscode segment start: mov ax,data mov ds,ax mov si,2 ; mov cx,6 ;循环6次,取出年月日时分秒 mov bx,20 ;从年份开始读 s1: pus.原创 2020-06-02 22:38:16 · 409 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第十四章 端口(检测点14.1、检测点14.2)
文章目录14.1 端口的读写14.2 CMOS RAM芯片检测点 14.114.3 shl和shr指令检测点 14.214.4 CMOS RAM中存储的时间信息14.1 端口的读写在访问端口的时候,CPU通过端口地址来定位端口。因为端口所在的芯片和CPU通过总线相连,所以,端口地址和内存地址一样,通过地址总线来传送。在PC系统中,CPU最多可以定位64KB个不同的端口。则端口地址的范围为0~65535。端口的读写指令只有两条:in和out,分别用于从端口读取数据和往端口写入数据14.2 CM原创 2020-06-02 12:38:08 · 1103 阅读 · 1 评论 -
汇编语言 | 将data段内容转为大写并以特定颜色输出
编程:(1) 根据书本P159图7.4所示,将datasg段中的前四个字母改为大写字母;(2) 并将修改后datasg段中的前四个字母显示在屏幕的12行15列,字符属性02h。输出结果如下图所示:代码:assume cs:codesg,ss:stacksg,ds:datasgstacksg segment dw 0,0,0,0,0,0,0,0stacksg endsdatasg segment db '1. display ' db '2. brows .原创 2020-05-30 08:50:12 · 559 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第十三章 int指令
文章目录13.1 int指令13.2 编写供应用程序调用的中断例程中断信息可以来自CPU的内部和外部,当CPU内部有需要处理的事情发生的时候,将产生需要马上处理的中断信息,引发中断过程。这一章中,我们讲解另一种重要的内中断,由int指令引发的中断。13.1 int指令int指令的格式为:int n,n为中断类型码,它的功能是引发中断过程。13.2 编写供应用程序调用的中断例程问题1:编写、安装中断7ch的中断例程...原创 2020-05-26 23:29:28 · 510 阅读 · 0 评论 -
汇编语言 实验13 编写、应用中断例程
文章目录Part1Part2Part3Part11.写并安装Int 7ch 中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200处。参数:(dh)=行号,(dl)=列号,(cl)=颜色,ds:si指向字符串首地址。以上中断例程安装成功后,对下面的程序进行单步跟踪,尤其注意观察int、iret指令执行前后CS、IP和栈中的状态。test.asmassume cs:codedata segment db 'Welcome to masm!', 0data endsco原创 2020-05-26 21:35:58 · 563 阅读 · 0 评论 -
汇编语言 实验11 编写子程序 & 实验12 编写0号中断的处理程序
文章目录实验11 编写子程序实验12 编写0号中断的处理程序实验11 编写子程序编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母,描述如下。名称:letterc功能:将以0结尾的字符串中的小写字母转变成大写字母参数:ds:si指向字符串首地址应用举例: assume cs:codesg datasg segment db "Beginner's All-purpose Symbolic Instruction Code.",0 datasg原创 2020-05-21 11:40:21 · 726 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第十二章 内中断
文章目录前言12.1 内中断的产生12.2 中断处理程序12.3 中断向量表前言任何一个通用的CPU,比如8086,都具备一种能力,可以在执行完当前正在执行的指令之后,检测到从CPU外部发送过来的或内部产生的一种特殊信息,并且可以立即对所接受到的信息进行处理。这种特殊的信息,我们可以称其为:中断信息。中断的意思是指,CPU不再接着(刚执行完的指令)向下执行,而是转去处理这个特殊信息。注意,我们这里所说的中断信息,是为了便于理解而采用的一种逻辑上的说法。它是对几个具有先后顺序的硬件操作所产生的时间的统一原创 2020-05-21 10:02:53 · 639 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第十一章 标志寄存器(2)
文章目录11.8 cmp指令11.9 检测比较结果的条件转移指令检测点11.311.10 DF标志和串传送指令11.11 pushf和popf检测点11.411.12 标志寄存器在Debug中的表示11.8 cmp指令cmp是比较指令,cmp的功能相当于减法指令,只是不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。cmp 指令格式:cmp 操作对象1,操作对象2功能:计算操作对象1-操作对象2,但并不保存结果,仅仅根据计算结果对标原创 2020-05-16 17:31:07 · 868 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第十一章 标志寄存器(1)
文章目录引言11.1 ZF标志11.2 PF标志11.3 SF标志检测点11.111.4 CF标志11.5 OF标志引言这种特殊的寄存器在8086CPU中,被称为标志寄存器。8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW)。标志寄存器flag11.1 ZF标志flag的第6位是ZF,零标志位。它记录相关指令执行后,其结果是否为0。如果结果为0,那么zf=1;如果结果为1,那么zf=0。比如指令:mov ax,1sub ax,1执行后,结果为0,原创 2020-05-13 19:28:37 · 1111 阅读 · 0 评论 -
汇编语言(王爽版) 课程设计1
任务:将实验7中的 Power idea 公司的数据按照图10.2所示的格式在屏幕上显示出来。代码实现assume cs:codedata segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1984','1985','1986','1987','1988','1989','1990','1991','1992' db '1993','1994','1995' .原创 2020-05-12 02:11:20 · 369 阅读 · 0 评论 -
汇编语言(王爽版)实验10 编写子程序
文章目录1.显示字符串2.解决除法溢出的问题3.数值显示编写三个子程序:显示字符串、解决除法溢出的问题、数值显示。1.显示字符串代码实现assume cs:code data segment db 'Welcome to masm!',0 data ends code segment start:mov dh,8 mov dl,3 mov cl,2 mov ax,data mov ds,ax mov si,0 call show_原创 2020-05-12 01:56:43 · 590 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第十章 CALL和RET指令(2)
文章目录10.8 mul指令10.9 模块化程序设计10.10 参数和结果传递的问题10.11 批量数据的传递10.12 寄存器冲突的问题问题10.210.8 mul指令mul是乘法指令。(1)两个相乘的数:要么都是8位,要么都是16位。都是8位,一个默认放在AL中,另一个放在8位reg或内存字节单元中。如果都是16位,一个默认在AX中,另一个放在16位reg或内存单元中。(2)结果:如果是8位乘法,结果默认放在AX中;如果是16位乘法,结果高位默认放在DX中,低位放在AX中。格式如下:mu原创 2020-05-12 01:14:36 · 393 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第十章 CALL和RET指令(1)
文章目录前言10.1 ret和retfret指令retf指令分析程序检测点10.110.2 call指令10.3 依据位移进行转移的call指令检测点 10.2前言call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP。它们经常被共同用来实现子程序的设计。10.1 ret和retf1.ret指令用栈中的数据,修改IP的内容,从而实现近转移;2.retf指令用栈中的数据...原创 2020-04-28 18:30:29 · 854 阅读 · 0 评论 -
汇编语言编程实现彩色语句 | 汇编语言(王爽版)实验8 && 实验9
文章目录实验8 分析一个奇怪的程序实验9 根据材料编程实验8 分析一个奇怪的程序assume cs:codesgcodesg segment mov ax,4c00h int 21hstart: mov ax,0 s: nop nop mov di,offset s mov si,offset s2 mov ax,cs:[si] mov cs:[di],a...原创 2020-04-21 11:05:05 · 1236 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第九章 转移指令的原理
文章目录前言9.1 操作符offset问题9.19.2 jmp指令9.3 依据位移进行转移的jmp指令9.4 转移的目的地址在指令中的jmp指令9.5 转移地址在寄存器中的jmp指令9.6 转移地址在内存中的jmp指令检测点9.19.7 jcxz指令检测点9.29.8 loop指令检测点9.39.9 根据位移进行转移的意义9.10 编译器对转移位移超界的检测前言可以修改IP,或同时修改CS和...原创 2020-04-19 14:16:30 · 606 阅读 · 0 评论 -
利用汇编语言实现数据存储 | 汇编语言(王爽版)实验7 寻址方式在机构化数据访问中的应用
文章目录实验内容:1.源数据在哪里2.目标存放位用什么来表示3.初始化阶段4.每次循环要执行的任务5.上机结果6.实验小结实验内容:Power idea公司从1975年成立一直到1995年的基本情况如下。年份收入(千美元)雇员人均收入(千美元)1975163?1976227?19773829?1978135613?197...原创 2020-04-14 17:42:39 · 1162 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第八章 数据处理的两个基本问题(2)
文章目录8.6 寻址方式的综合应用实例8.7 div指令8.8 伪指令dd问题8.18.9 dup8.6 寻址方式的综合应用实例数据存放确定需要修改的数据确定修改的方法根据上面的分析,程序如下:mov ax,segmov ds,axmov bx,60h ;确定记录地址mov word ptr [bx+0ch],38add word ptr [bx+0eh],70...原创 2020-04-14 10:33:33 · 838 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第八章 数据处理的两个基本问题(1)
文章目录引言8.1 bx,si,di,bp8.2 机器指令处理的数据所在位置8.3 汇编语言中数据位置的表达8.4 寻址方式8.5 指令要处理的数据有多长?引言本章对前面的所有内容是具有总结性的。我们知道,计算机是进行数据处理、运算的机器,那么有两个基本问题就包含在其中:(1)处理的数据在什么地方?(2)要处理的数据有多长?为了描述上的简洁,在以后的课程中,我们将使用两个描述性的符号...原创 2020-04-14 02:38:14 · 573 阅读 · 0 评论 -
如何使用汇编语言进行双重循环 | 汇编语言(王爽版)学习笔记 第七章 更灵活的定位内存地址的方法(3)
7.10原创 2020-04-11 16:26:29 · 1517 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第七章 更灵活的定位内存地址的方法(2)
文章目录7.7 SI和DI问题7.2问题7.37.8 [bx+si]和[bx+di]问题7.47.9 [bx+si+idata]和[bx+di+idata]问题7.57.7 SI和DIsi和di是8086CPU中和bx相似的16位寄存器,但是si和di不能分成两个8位的寄存器。问题7.2"welcome wo masm!"从偏移地址0开始存放长度为16个字节,所以,它后面的数据区的偏...原创 2020-04-03 23:41:00 · 366 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第七章 更灵活的定位内存地址的方法(1)
文章目录7.1 and和or指令7.2关于ASCII码7.3以字符形式给出的数据7.4大小写转化的问题7.5[bx+idata]问题7.17.6 用[bx+idata]的方式进行数组的处理7.1 and和or指令and指令:逻辑与指令,按位进行运算。通过该指令可以将操作对象的相应位设为0,其它位不变。or指令:逻辑或指令,按位进行或运算。通过该指令可将操作对象的相应位设为1,其他...原创 2020-04-03 21:19:50 · 485 阅读 · 0 评论 -
汇编语言(王爽版)实验5 编写、调试具有多个段的程序
(1)将下面的程序编译、链接,用Debug加载、跟踪,然后回答问题。assume cs:code,ds:data,ss:stackdata segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdata endsstack segment dw 0,0,0,0,0,0,0,0stack endscode segmen...原创 2020-03-31 14:57:02 · 618 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第六章 包含多个段的程序
文章目录6.1 在代码段中使用数据6.2 在代码段中使用栈检测点6.16.3 将数据、代码、栈放入不同的段6.1 在代码段中使用数据考虑这样一个问题,编程计算以下8个数据的和,结果存在ax寄存器中:0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H。(前面的章节是累加某些内存单元中的数据,并不关心数据本身。这个问题是要累加已经给定了数值的数据。)...原创 2020-03-31 11:01:20 · 383 阅读 · 0 评论 -
汇编语言(王爽版) | 实验4 [bx]和loop的使用
文章目录题1题2题1编程,向内存0:200-0:23F,依次传送:数据0-63(3FH),程序中只能使用9条指令,9条指令中包括"mov ax,4c00h"和"int 21h"assume cs:codecode segment mov ax,0020h mov ds,ax mov bx,0 mov cx,64s: mov ds:[bx],bx ;利用bx同时进行定位和赋值 i...原创 2020-03-24 11:39:16 · 628 阅读 · 0 评论 -
使用汇编语言设计循环程序|汇编语言(王爽版)学习笔记 第五章 [BX]和loop指令(2)
文章目录5.4 Debug和汇编编译器Masm对指令的不同处理5.5 loop和[bx]的联合应用问题5.4 用loop指令实现上述程序5.6 段前缀5.7 一段安全的空间5.8 段前缀的使用5.4 Debug和汇编编译器Masm对指令的不同处理我们在Debug中写过类似的指令:mov ax,[0]表示将ds:0处的数据送入al中但是再汇编源程序中,"mov ax,[0]"指令被编译器当...原创 2020-03-24 10:13:37 · 554 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第五章 [BX]和loop指令(1)
文章目录前言[bx]和内存单元的描述5.1 [BX]问题5.15.2 Loop指令问题5.35.3 在Debug中跟踪用loop指令实现的循环程序前言[bx]和内存单元的描述[bx]是什么呢?和[0]有些类似,但[0]表示内存单元,它的偏移地址是0。我们要完整地描述一个内存单元,需要两种信息: 1. 内存单元的地址 2. 内存单元的长度(类型)我们用[0]表示一个内存单元时,0...原创 2020-03-23 16:43:08 · 1591 阅读 · 0 评论 -
实验3 编程、编译、链接、跟踪
这一章的实验比较简单。文章目录0x01.编程0x02.编译0x03.链接0x04.运行并跟踪0x01.编程可以用文本编辑器编程后改后缀名为.asm即可,此处我保存为t1.asm0x02.编译这一步打开DOS需要cd 到DOS的masm目录,路径信息在DOS窗口可以看到0x03.链接把.obj文件link生成.exe文件0x04.运行并跟踪debug命令调试生成的exe文件...原创 2020-03-17 22:21:17 · 208 阅读 · 0 评论 -
exe程序的前世今生|汇编语言(王爽版)学习笔记 第四章 第一个程序
文章目录引言4.1一个源程序从写出到执行的过程编写汇编源程序对源程序进行编译链接可执行文件执行可执行文件中的程序4.2 源程序定义一个段程序经编译链接后变为机器码标号DOS中的程序运行4.3 编辑源程序4.4 编译4.5链接问题4.1问题4.24.9 程序执行过程的跟踪引言我们开始编写完整的汇编语言程序,用编译器将它们编译成为可执行文件(如*.exe文件),在操作系统中运行。4.1一个源程序...原创 2020-03-17 21:29:51 · 718 阅读 · 0 评论 -
栈机制与pop、push指令|汇编语言(王爽版)学习笔记 第三章 寄存器【内存访问】(3)
文章目录3.6 栈3.7 CPU提供的栈机制push指令的执行过程问题3.6pop指令的执行过程3.8 栈顶超界的问题3.9 push、pop指令问题3.7问题3.8问题3.9问题3.103.10 栈段问题 3.11问题 3.12段的综述检测点3.23.6 栈栈是一种具有特殊的访问方式的存储空间。它的特殊性就在于,最后进入这个空间的数据,最先出去。栈有两个基本的操作:入栈和出栈。入...原创 2020-03-17 12:25:00 · 2828 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第三章 寄存器【内存访问】(2)
文章目录3.4 mov、add、sub指令3.5数据段如何访问数据段中的数据?问题3.53.1-3.5小结检测点3.13.4 mov、add、sub指令已学mov指令的几种形式:mov 寄存器,数据 例:mov ax,1mov 寄存器,寄存器 例:mov ax,bxmov 寄存器,内存单元 例:mov ax,[0]mov 内存单元,寄存器 例:mov [0],axmov 段寄存器...原创 2020-03-17 01:28:00 · 786 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第三章 寄存器【内存访问】(1)
文章目录引言3.1 内存中字的存储问题3.1结论3.2 DS和[address]引言在第二章中,我们主要从CPU如何执行指令的角度讲解了8086CPU的逻辑结构、形成物理地址的方法、相关寄存器以及一些指令。这一章中,我们从访问内存的角度继续学习几个寄存器。3.1 内存中字的存储例:在0地址处开始存放20000(4E20)高8位存放高位字节,低8位存放低位字节内存单元是字节单元,...原创 2020-03-15 01:31:31 · 488 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 实验2 用机器指令和汇编指令编程
实验任务:操作过程:答:mov ax,[0] ; ax=C0EAadd ax,[2] ; ax=C0FCmov bx,[4] ; bx=30F0add bx,[6] ; bx=6021push ax ; sp= 00FE ;修改的内存单元的地址是2200:FE-...原创 2020-03-13 11:23:48 · 484 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 实验1 查看CPU和内存,用机器指令和汇编指令编程
文章目录实验1 查看CPU和内存,用机器指令和汇编指令编程各种DEBUG命令:实验1 查看CPU和内存,用机器指令和汇编指令编程Win10用户如果不想装虚拟机(我以前就为了汇编装过虚拟机…)进行debug,可以下载DosBox,很好用的汇编工具,安装教程自行查找吧。各种DEBUG命令:R命令查看、改变CPU寄存器的内容D命令查看内存的内容E命令改写内存中的内容U命令将内存中的机器指...原创 2020-03-10 11:29:28 · 247 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第二章 寄存器【CPU工作原理】(3)
文章目录2.9 段寄存器2.10 CS和IP8086PC工作过程的简要描述2.11 修改CS、IP指令转移指令2.12 代码段小结检测点2.32.9 段寄存器段寄存器是提供段地址的8086CPU有4个段寄存器:CS、DS、SS、ES当8086CPU要访问内存时,由这4个段寄存器提供内存单元的段地址2.10 CS和IPCS和IP是8086CPU中最关键的寄存器,它们指示了CPU当...原创 2020-03-10 11:12:07 · 425 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第二章 寄存器【CPU工作原理】(2)
文章目录2.4 物理地址2.5 16位结构的CPU2.6 8086CPU给出物理地址的方法2.7 "物理地址=段地址*16+偏移地址"的本质含义2.8 段的概念检测点 2.22.4 物理地址CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。这个唯一的地址称为物理地址。2.5 16位结构的CPU概括的讲,16位结构描述了一个CPU具有以下几个...原创 2020-03-06 21:31:23 · 288 阅读 · 0 评论 -
汇编语言(王爽版)学习笔记 第二章 寄存器【CPU工作原理】(1)
CPU概述一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。区别:内部总线实现CPU内部各个器件之间的联系外部总线实现CPU和主板上其它器件的联系8086CPU有14个寄存器:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW2.1通用寄存器8086CPU所有的寄存器都是16位的,可以存放两个字节。AX,BX,C...原创 2020-03-06 20:25:40 · 305 阅读 · 0 评论