摘要:一、运算结果标志位1、进位标志CF(Carry Flag)进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令...
阅读全文
随笔分类 - 汇编
摘要:ReadCommand struc ; data struct to describe a read commandPackSize db 0Reserved db 0BlockCount dw 0BufferAddr dd 0BlockNumLow dd 0BlockNumHigh dd 0ReadCommand endsDiskAddressFD ReadCommand ; read 20h sectors from sector 0x138e4 into address 1000:0000
阅读全文
摘要:补码原码也叫符号一绝对值码最高位0表示正1表示负,其余二进制位是该数字的绝对值的二进制位原码简单易懂加减运算复杂存在加减乘除四种运算,增加了CPU的复杂度零的表示不唯一反码反码运算不便,也没有在计算机中应用移码移码表示数值平移n位,n称为移码量移码主要用于浮点数的阶码的存储补码已知十进制求二进制求正整数的二进制除2取余,直至商为零,余数倒叙排序求负整数的二进制先求与该负数相对应的正整数的二进制代码,然后将所有位取反,末尾加1,不够位数时,左边补1求零的二进制全是零已知二进制求十进制如果首位是0,则表明是正整数,按普通方法来求如果首位是1,则表明是负整数将所有位取反,末尾加1,所得数字就是该负数
阅读全文
摘要:lodsb、stosb(和lodsw、stosw和lodsd、stosd指令)1 -->lodsb 指令:从esi 指向的源地址中逐一读取一个字符,送入AL 中; (然后,可以先判断这个字符是什么字符,如0dh,0ah 之类等,再执行相应的操作); 2 -->stosb 指令:一般跟随在lodsb 指令后面,将AL 中的字符逐一写入edi 指向的目的地址; 3 当方向标志位D=0时,则esi自动增加;D=1时,esi自动减小。 类似有:-->如果是lodsw ,表明要处理的是字,而不是字符;则采用的相应指令是:stosw ;那么要判断的寄存器是AX,而不是AL 了.-->
阅读全文
摘要:ret指令用栈中的数据,修改IP的值,从而实现近转移。第一种用法:CPU执行ret指令时,进行下面两步操作:(IP)=((SS)*16+(SP))(SP)=(SP)+2;第一种用法: ret n (n为整数)等效于(IP)=((SS)*16+(SP))(SP)=(SP)+2;(IP)=(IP)+n;例如ret 4pop ipadd sp,4
阅读全文
摘要:;=======字符串的输入=========;功能:;1、在输入的同时显示这个字符串;2、在输入回车符后,字符串输入结束;3、能够删除已经输入的字符;;字符串的入栈、出栈、显示;参数说明:;1、(ah)=功能号,;0表示入栈;1表示出栈;2表示显示 ;2、ds:si指向字符栈空间;3、 对于0号功能:(al)=入栈字符;对于1号功能:(al)=返回的字符;对于2号功能:(dh)、(dl)=字符串在屏幕上显示的行、列位置assume cs:code, ds:stackstack segment dd 128 dup(0)stack endscode segmentstart: mov a...
阅读全文
摘要:;编程:;(1) 清屏;(2) 设置前景色;(3) 设置背景色;(4) 向上滚动一行;入口参数说明:;(1)用ah寄存器传递功能号: 0 清屏, 1设置前景色,2设置背景色, 3向上滚动一行; (2)对于2 3 号功能,用al传送颜色值 al[0,1,2,3,4,5,6,7];各种功能如何实现;(1) 清屏:将显存中当前屏幕中的字符设为空格符;(2) 设置前景色:设置显存中当前屏幕中处于奇地址的属性字节的第0、1、2位;(3) 设置背景色:设置显存中当前屏幕中处于奇地址的属性字节的第4、5、6位;(4) 向上滚动一行:依次将第n+1行的内容复制到第n行,最后一行为空assume cs:code
阅读全文
摘要:可屏蔽中断可屏蔽中断是 CPU可以不响应的外中断CPU是否响应可屏蔽中断,要看标志寄存器的IF位的设置 如果 IF=1, 则CPU在执行完当前指令后响应中断,引发中断过程 如果IF=0,则不响应可屏蔽中断8086CPU设置IF的指令:sti 设置IF=1cli 设置IF=0不可屏蔽中断不可屏蔽中断时CPU必须响应的外部中断当CPU检测到不可屏蔽中断信息时,则在执行完当前指令后,立即响应,引发中断过程对于8086CPU,不可屏蔽中断的中断类型码固定为2,所以在中断过程中,不需要取得中断类型码,
阅读全文
摘要:;任务:; 安装一个新的int 9中断例程;功能:; 在DOS下,按Tab建后改变当前屏幕的显示颜色,其它键照常处理 1 assume cs:code 2 3 stack segment 4 db 128 dup(0) 5 stack ends 6 7 code segment 8 start: 9 mov ax, stack10 mov ss, ax11 mov sp, 12812 13 push cs14 pop ds15 16 ;把自己的int9中断例程安装到0:[204h]17 mov ax, 018 mov es, ax19 mov si, offset int920 mov...
阅读全文
摘要:;访问CMOS RAM;;编程:;以"年/月/日 时:分:秒" 的格式,显示当前的日期、时间; 1 assume cs:code 2 3 data segment 4 db '9/8/7 4:2:0', '$' 5 data ends 6 7 code segment 8 start: 9 10 mov ax, data 11 mov ds, ax 12 mov bx, 0 13 mov di, 0 ;初始化参数 14 15 s: 16 mov al, [bx] ;al 传递的参数 注意此时al存放的是9的ASCII码 17 ...
阅读全文
摘要:各种存储器都和CPU的地址线、数据线、控制线相连CPU在操作它们都当做内存来对待,把它们总的看做一个由若干存储单元组成的逻辑存储器,这个逻辑存储器称为内存地址空间端口的读写注意:在in和out指令中,只能使用ax或al来存放从端口中读入的数据或要发送到端口中的数据。访问8位端口时用al, 访问16位端口时用axshl和shr指令逻辑移位指令shl指令 逻辑左移指令功能: 1、将一个寄存器或内存单元中的数据向左移位 2、将最后移出的一位写入CF中 3、最低位用0补充指令: mov al, 01001000b shl al, 1 执行后:(al)=10010000b, CF...
阅读全文
摘要:;问题:用中断例程完成loop指令的功能;应用举例:在屏幕中断显示80个'!'?1.asm;安装中断例程assume cs:codecode segmentstart: mov ax, cs mov ds, ax mov si, offset lp ;ds:[si] 只指向源地址 mov ax, 0 mov es, ax mov di, 200h ;es:[di] 指向目标地址 mov cx, offset lpend - offset lp ;cx为传输长度 cld ;传输方向为正 rep movsb ;rep 为cx!=0 继续 拷贝[movsb] ;...
阅读全文
摘要:int 指令格式: int n ;n位中断类型码功能: 引发中断过程CPU执行int n,相当于引发一个n号中断的中断的中断过程,执行过程如下:1、取中断类型码2、标志寄存器入站,IF=0,TF=03、CS,IP入栈4、(IP)=(n*4), (CS)=(n*4+2)iret指令功能: 用栈中的内容设置CS、IP和标志寄存器
阅读全文
摘要:;编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母;功能:将以0结尾的字符串中的小写字母转变成大写字母;参数:ds:si只想字符串首地址;注意:需要进行转化的是字符串中的小写字母'a'~'z',而不是其他字符assume cs:codedata segment db "Beginner's All-purpose Symbolic Instruction Code.", 0data endscode segmentstart: mov ax, data mov ds, ax mov si, 0 call le
阅读全文
摘要:ASCII码表 信息在计算机上是用二进制表示的,这种表示法让人理解就很困难。因此计算机上都配有输入和输出设备,这些设备的主要目的就是,以一种人类可阅读的形式将信息在这些设备上显示出来供人阅读理解。为保证人类和设备,设备和计算机之间能进行正确的信息交换,人们编制的统一的信息交换代码,这就是ASCII码表,它的全称是“美国信息交换标准代码”。八进制十六进制十进制字符八进制十六进制十进制字符00000nul1004064@01011soh1014165A02022stx1024266B03033etx1034367C04044eot1044468D05055enq1054569E06066ack1.
阅读全文
摘要:求安装一个新的int 7ch中断例程,实现通过逻辑扇区号对软盘进行读写操作参数说明:1、用ah寄存器传递功能号,0表示读,1表示写2、用bx寄存器传递要读写的扇区的逻辑扇区号3、用es:si指向存储读出数据或写入数据的缓冲区三、分析 分析可得逻辑扇区号和物理扇区号对应关系如下:逻辑扇区号 = (面号*80+磁道号)*18+扇区号-1 那么可以使用下面的算法来计算int():描述性运算符,取商rem():描述性运算符,取余数逻辑扇区号 = (面号*80+磁道号)*18+扇区号-1面号 = int(逻辑扇区号/1440)磁道号 = int(rem(逻辑扇区号/1440)/18)扇区号 =...
阅读全文