汇编
文章平均质量分 84
tmhhh
这个作者很懒,什么都没留下…
展开
-
汇编语言(王爽)实验十七
实验十七用面号、磁道号、扇区号访问磁盘不太方便,考虑对它们进行统一编号方法如下,称此编号为逻辑扇区编号逻辑扇区号=(面号*80 + 磁道号)*18 + 扇区号-1反过来面号=int(逻辑扇区号/1440)磁道号=int(rem(逻辑扇区号/1440)/18)扇区号=rem(rem(逻辑扇区号/1440)/18)+1int():取商rem():取余数安装一个新的int 7ch...原创 2020-03-31 20:48:11 · 1638 阅读 · 2 评论 -
汇编语言(王爽)第十七章 使用BIOS进行键盘输入和磁盘读写
第十七章17.1 int 9中断例程对键盘输入的处理一般的键盘输入,在CPU执行完int 9中断例程后,都放到了键盘缓冲区中。键盘缓冲区共有16个字单元。可存储15个按键的扫描码和对应的ASCII码那么它们是如何写入的:初始状态下,没有键盘输入,缓冲区为空(缓冲区是用环形队列结构管理的内存区)按下A,引发键盘中断,CPU执行int 9中断例程,从60h端口读出A键的通码,然后检测状态字...原创 2020-03-31 20:47:16 · 1316 阅读 · 0 评论 -
汇编语言(王爽)实验十六
实验十六安装一个新发int 7ch中断例程,为显示输出提供如下功能子程序1、清屏2、设置前景色3、设置背景色4、向上滚动一行assume cs:codecode segment start: mov ax,0 mov es,ax mov ax,200h mov di,ax mov ax,cs mov ds,ax mov ax,offse...原创 2020-03-30 14:21:15 · 1579 阅读 · 1 评论 -
汇编语言(王爽)第十六章 直接定址表
第十六章16.1 描述了单元长度的标号之前我们一直在代码段中使用标号来标记指令、数据、段的起始地址assume cs:codecode segment a: db 1,2,3,4,5,6,7,8 b: dw 0 start: mov si,offset a mov bx,offset b mov cx,8 s: mov al,cs:[si] mov ...原创 2020-03-29 18:15:38 · 855 阅读 · 0 评论 -
汇编语言(王爽)实验十五
实验十五安装一个新的int 9中断例程 功能:按下A键后,除非不松开,如果松开,就显示满屏幕的A,其他键照常处理assume cs:code stack segment db 128 dup(0)stack ends code segmentstart: mov ax,stack mov ss,ax mov sp,128 push cs ...原创 2020-03-28 16:31:27 · 446 阅读 · 0 评论 -
汇编语言(王爽)第十五章 外中断
第十五章在计算机系统中,CPU除了能执行指令,进行运算外,还能对外部设备进行控制,接收它们的输入,向它们进行输出,即I/O能力,比如在文本编辑器中,我们按键盘中的一个键,可以看到屏幕上出现该字母,是CPU将从键盘上输入的键对应的字符送到显示器上及时处理外设的输入,有两个问题,即外设的输入随时可能发生,CPU如何得知,以及CPU从何处得到外设的输入以键盘为例进行讨论15.1 接口芯片和端口...原创 2020-03-28 14:21:07 · 764 阅读 · 0 评论 -
汇编语言(王爽)第十四章 端口&实验十四
第十四章CPU在操控各种存储器时,都把它们当作内存来对待,把它们总地看做一个由若干存储单元组成的逻辑存储器,这个逻辑存储器我们称为内存地址空间PC机中,除了各种存储器外,还有以下3种芯片和CPU通过总线相连1、各种接口卡(网卡、显卡)上的接口芯片,它们控制接口卡进行工作2、主板上的接口芯片,CPU通过它们对部分外设进行访问3、其他芯片,用来存储相关的系统信息,或进行相关的输入输出处理这...原创 2020-03-26 10:23:36 · 1123 阅读 · 0 评论 -
汇编语言(王爽)实验十三
实验十三1、编写并安装int7ch中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200处参数:(dh)=行号 (dl)=列好 (cl)=颜色 ds:si指向字符串首地址assume cs:codedata segment db "welcome to masm!",0data endscode segment start: mov dh,10 mov dl,1...原创 2020-03-22 18:17:11 · 1420 阅读 · 1 评论 -
第十三章(王爽) int指令
第十三章int指令引发的中断是另一种内中断13.1 int指令格式:int n,n为中断类型码功能:引发中断过程执行过程:1、取中断类型码n2、标志寄存器入栈,IF=0 TF=03、CS、IP入栈4、(IP)=(n*4) (CS)=(n*4+2)从此转去执行n号中断的中断处理程序assume cs:codecode segment start: mov ax,0...原创 2020-03-21 21:42:23 · 873 阅读 · 0 评论 -
汇编语言(王爽)实验十二
实验十二编写0号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串"divide error!"基本跟课本中的代码一致assume cs:codecode segment start: mov ax,cs mov ds,ax mov si,offset do0 ; 设置ds:si指向源地址 mov ax,0 mov es,ax mov ...原创 2020-03-20 16:16:09 · 2738 阅读 · 0 评论 -
汇编语言(王爽)第十二章 内中断
第十二章CPU可以在执行完当前正在执行的指令之后,检测到从CPU外部或内部产生的一种特殊信息,并且可以立即对所接收到的信息进行处理,这种特殊的信息称为中断信息,其向所要进行的该种处理提供了必备的参数的通知信息中断:CPU不在接着刚执行完的指令向下执行,而是转去执行这个特殊信息12.1 内中断的产生对于8086CPU,当CPU内部有下面的情况发生的时候,将产生中断信息1、除法错误,比如,执...原创 2020-03-19 20:56:32 · 884 阅读 · 0 评论 -
汇编语言(王爽)实验十一
实验十一编写一个程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母assume cs:codesgdatasg segment db "Beginner's All-purpose Symbolic Instruction Code.",0datasg endscodesg segment begin: mov ax,datasg mov ds,ax m...原创 2020-03-18 14:58:07 · 1682 阅读 · 0 评论 -
汇编语言(王爽)第十一章
第十一章8086CPU的标志寄存器(简称flag)有16位,其中存储的信息称为程序状态字(PSW),其作用主要有3个1、存储相关指令的某些存储结果2、为CPU执行相关指令提供行为依据3、控制CPU 的相关工作方式其他寄存器存放数据时,是整个寄存器具有一个含义,而flag寄存器按位起作用,即每一位都有专门的含义,下图为8086CPU的flag寄存器结构某些空白位不具有任何含义11.1...原创 2020-03-16 15:24:54 · 1513 阅读 · 0 评论 -
汇编语言(王爽)实验十
实验十编写3个子程序1、显示字符串功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串参数:(dh)=行号、(dl)=列号、(cl)=颜色、ds:si指向字符串的首地址行、列从0开始计数如要求在屏幕的8行3列,用绿色显示data段中的字符串assume cs:codedata segment db 'Welcome to masm!',0data endscode s...原创 2020-03-14 20:12:51 · 6441 阅读 · 7 评论 -
汇编语言(王爽)第十章
第十章call和ret都是转移指令,都修改IP或同时修改CS和IP,用于子程序的设计10.1 ret和retfret指令用栈中的数据,修改IP的内容,从而实现近转移retf指令用栈中的数据,修改CS和IP的内容,实现远转移执行ret时:1、(IP)=((ss)*16+(sp))2、(sp)=(sp)+2用汇编语法解释,相当于pop IP执行retf时:1、(IP)=((ss)*...原创 2020-03-11 20:37:16 · 873 阅读 · 0 评论 -
汇编语言(王爽)实验八&实验九
实验八分析下面的程序,能否正确返回assume cs:codesgcodesg segment mov ax,4c00h int 21h start: mov ax,0 s: nop ; nop占一个字节 nop ; jmp short s1 mov di,offset s mov si,offset s2 mov ax,c...原创 2020-03-09 17:34:05 · 815 阅读 · 0 评论 -
汇编语言(王爽)第九章
第九章可以修改IP或者同时修改CS和IP的指令统称为转移指令只修改IP的为段内转移,如:jmp ax同时修改CS和IP的为段间转移,如:jmp 1000:0段内转移又分为:短转移和近转移短转移IP的修改范围为-128~127近转IP的修改范围为-32768~327678086转移指令分类· 无条件转移指令(如:jmp)· 条件转移指令· 循环指令(如:loop)· 过程· ...原创 2020-03-08 21:56:16 · 734 阅读 · 0 评论 -
汇编语言(王爽)实验七
实验七Power idea公司从1975年到1995年的基本情况如下年份收入(千美元)雇员人均收入(千美元)1975163?1976227?19773829?1978135613?1979239028?1980800038?………………?1995593700017800?程序...原创 2020-03-07 22:24:35 · 3064 阅读 · 0 评论 -
汇编语言(王爽)第八章
第八章定义描述性符号reg表示一个寄存器,sreg描述一个段寄存器reg:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、disreg:ds、ss、cs、es8.1 bx、si、di和bp在8086CPU中,只有这4个寄存器可以用在[……]中来进行内存单元的寻址下面指令是错误的mov ax,[cx]mov ax,[ax]mov ax,[d...原创 2020-03-06 21:59:52 · 2492 阅读 · 0 评论 -
汇编语言(王爽)第七章&实验六
汇编语言第七章&实验六7.1 and和or指令and指令,逻辑与指令,按位进行与运算mov al,01100011Band al,00111011B执行后al=00100011B,通过该指令可将操作对象的相应位设为0,其他位不变or指令,逻辑或指令,按位进行或运算mov al,01100011Bor al,00111011B执行后al=01111011B ,通过该指令...原创 2020-03-02 16:56:53 · 1771 阅读 · 1 评论 -
汇编语言(王爽)实验五
实验五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...原创 2020-02-29 15:34:08 · 5851 阅读 · 2 评论 -
汇编语言(王爽)第六章
第六章6.1 在代码段中使用数据编程以下8个数据的和,结果存在ax寄存器中,用循环累加的方式想用循环,就需要把这些数据存储在一组地址连续的内存单元中,之前提到过应该让系统来分配空间,因此我们在程序中定义希望处理的数据,这些数据最终会成为程序的一部分写到可执行文件中,可执行文件加载到内存中后,这些数据便自然获得了存储空间assume cs:codecode segment dw 0...原创 2020-02-27 22:58:32 · 738 阅读 · 0 评论 -
汇编语言实验四
实验四1、编程,向内存0:200~0:23F依次传送数据0·63(3FH)assume cs:codesgcodesg segment mov ax,0H mov ds,ax mov bx,200H mov cx,64 ;0~63,共循环64次 s:mov [bx],ax inc ax inc bx loop s ...原创 2020-02-26 17:27:07 · 2231 阅读 · 2 评论 -
汇编语言(王爽)第五章
第五章预备知识[bx]同样表示一个内存单元,偏移地址在bx中,段地址在ds中我们用描述性的符号()来表示一个寄存器或一个内存单元中的内容(ax)表示ax中的内容,(20000H)表示内存20000H单元的内容((ds)*16+(bx)),ds中的内容为ADR1,bx中的内容为ADR2,所以表示ADR1:ADR2单元的内容(2000:0)、((ds):1000H)是不正确的用法一些具体...原创 2020-02-25 19:44:32 · 759 阅读 · 0 评论 -
汇编语言(王爽)实验三
实验三加载程序t1.exe,已知PSP的头两个字节是CD 20,用Debug查看PSP的内容加载程序后,CS:IP为076A:0000,根据公式可知PSP的首地址应为075A:0000,而DS中的值也恰好为075A所以执行命令d 075A:0...原创 2020-02-24 21:31:27 · 896 阅读 · 0 评论 -
汇编语言(王爽)第四章
第四章4.1 一个源程序从写出到执行的过程使用汇编语言编译程序对源程序进行编译,产生目标文件,再用连接程序对目标文件进行连接,生成可在操作系统中直接运行的可执行文件可执行文件包括两部分内容· 程序(从汇编指令翻译过来的机器码)和数据(源程序中定义的数据)· 相关的描述信息(如程序占用的内存空间等)操作系统根据可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进行相关的...原创 2020-02-19 22:50:03 · 684 阅读 · 0 评论 -
汇编语言实验二
实验二一、Debug补充1.1 关于D命令D命令由Debug执行,Debug在执行“d 1000:0”时,会先将段地址送入段寄存器中,由于访问内存的时一般都默认段地址在ds中,所以执行D命令时把段地址也送入ds比较合适,因此D命令也有新的形式d ds:10 18d cs:0 ; 查看当前代码段中的指令代码d ss:0 ; 查看当前栈段中的内容1.2 在E、A、U命令中使用段寄存器...原创 2020-02-18 22:18:53 · 978 阅读 · 0 评论 -
关于汇编语言中数字后是否要加H
debug和编译器对此的要求是不同的我们在编写.asm文件时,不加H默认为10进制,加H表示为16进制,若像4c00不加H,编译时报错Non-digit in number,因为不加H默认为10进制,而10进制中是不允许出现字母的,也有些编译器要求以0x开头表示16进制而debug中默认所有数字都是16进制。比如用A命令输入mov ax,100a,不用加H,否则出错在将.asm文件编译...原创 2020-02-14 14:32:47 · 5501 阅读 · 1 评论 -
汇编语言(王爽)笔记 第三章
第三章从访问内存角度学习寄存器3.1 内存中字的存储CPU中,16位寄存器存储一个字,高8位存放高位字节,低8位存放低位字节,在内存中,由于一个内存单元存储一个字节,所以用两个地址连续的内存单元来存放,低位字节存放在低地址单元中,高位字节存放在高地址单元中,如图所示0、1两个内存单元看作一个起始地址为0的字单元存放4E20H,1、2两个内存单元看作起始地址为1的字单元存放124EH,我们...原创 2020-02-13 22:47:23 · 1735 阅读 · 0 评论 -
汇编语言(王爽)实验一
实验一一、Debug的使用1.1 什么是Debug用来查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行的工具。1.2 用到的Debug功能· 用R命令查看、改变CPU寄存器的内容· 用D命令查看内存中的内容· 用E命令改写内存中的内容· 用U命令将内存中的机器指令翻译成汇编指令· 用T命令执行一条机器指令· 用A命令以汇编指令的格式在内存中写入一条机器指令1...原创 2020-02-08 20:28:37 · 5771 阅读 · 0 评论 -
汇编语言笔记第二章
第二章一个典型的CPU一般由运算器、控制器、寄存器等构成,这些器件靠内部总线相连,相对应的外部总线实现CPU和主板上其他器件的联系。总的来说,CPU中运算器进行信息处理,寄存器进行信息存储,控制器控制各器件进行工作。寄存器是CPU中程序员可以用指令读写的部件,通过改变寄存器中的内容来实现对CPU的控制。2.1 通用寄存器8086CPU的寄存器是16位的,可以存放两个字节。AX、BX、CX...原创 2020-02-01 13:50:13 · 374 阅读 · 0 评论 -
汇编语言笔记第一章
汇编语言第一章1.2 汇编语言的产生编写好的汇编指令通过编译器编译为机器码,由计算机最终执行。1.5 指令和数据在内存或磁盘上,,指令和数据没有任何区别,都是二进制信息。1000100111011000 -> 89D8H(数据)1000100111011000 -> mov ax, bx(程序)1.6 存储单元存储器被被划分为若干个存储单元,从0开始编号,如一个存储器...原创 2020-01-27 15:33:19 · 675 阅读 · 0 评论