随笔分类 -
汇编
摘要:外中断是指那些不再CPU内部产生的中断,即通过端口与cpu通信的外设产生的中断。可屏蔽中断是CPU可以不响应的外中断不可屏蔽中断是CPU必须响应的中断,其中断类型码都是2sti,cli可以屏蔽中断,让一些如改变中断向量的操作安全进行。(1)下面程序在屏幕中某个位置一次输出A~Z,按ESC改变该位置颜色: 1 ;中断时的入栈顺序是pushf,push cs, push ip 2 assume cs : codesg, ss : stacksg 3 4 stacksg SEGMENT 5 dw 64 dup (0) 6 stacksg ENDS 7 8 9 10 codesg SE...
阅读全文
摘要:这两个实验都需要操作软驱,也都只要用到dos系统。(1)对于实验15,要求在dos系统下运行实验程序,就要将exe文件转移到dos系统。我是这么做的,在vmware下给xp虚拟机设置一个dos软驱镜像(随便下一个),用WinImage将汇编,链接得到的exe文件导入dos软驱镜像。在启动虚拟机的时候设置启动项为floppy drive(软驱启动),就会启动到dos下,且可以运行导入的exe文件。(2)对于课程设计,可以先安装一个dos虚拟机,设置一个含有实验程序的软驱镜像。在启动虚拟机的时候设置启动项为floppy drive(软驱启动),就会自动运行你自己写的特别的程序。明天写实验~
阅读全文
摘要:编写int 7ch中断例程,实现:清屏设置前景色设置背景色向前滚动一行要求ah寄存器传递功能号:0, 1, 2, 3对应上述功能;al传递颜色值,al->[0, 7].中断程序中的call,jmp都应该选择偏移类型的指令,因为标号地址是编译器在汇编或者连接时期计算的,用偏移量才能保证指令安装在别的地址也能正常运行。标号后无冒号只能出现在代码段,无冒号可以代表数据类型和地址,有冒号的标号只能代表偏移。 1 ;中断时的入栈顺序是pushf,push cs, push ip 2 assume cs : codesg, ss : stacksg 3 4 stacksg SEGMENT 5 ...
阅读全文
摘要:端口读写分别用in和out,移位大于1时移位数先存在cl里。CMOS RAM在70h端口输入的是读写的地址,71h存储的地址存储的字节内容。cpu能直接读取的只有寄存器,内存和端口。访问CMOS RAM读取系统时间:View Code 1 ;中断时的入栈顺序是pushf,push cs, push ip 2 assume cs : codesg, ss : stacksg 3 4 stacksg SEGMENT 5 dw 16 dup (0) 6 stacksg ENDS 7 8 9 10 codesg SEGMENT 11 12 start: mo...
阅读全文
摘要:(1)编写并安装int 7ch中断例程,在dh行,dl列用cl颜色属性从ds:si处输出以0结尾的字符串。编写中断程序时要注意保护现场。安装程序如下: 1 assume cs : codesg, ss : stacksg 2 3 stacksg SEGMENT 4 dw 16 dup (0) 5 stacksg ENDS 6 7 8 9 codesg SEGMENT10 11 start: mov ax, 012 mov es, ax13 mov di, 0200h14 mov ax, codesg15 mov ds, ax16 m...
阅读全文
摘要:0号中断处理程序,开始安装在0000:0200处的程序最后用死循环导致显示不出‘divided error’,改成直接退出就正常显示了。注意修改ss,sp之间的中断是不响应的。 1 assume cs : codesg, ss : stacksg 2 3 stacksg SEGMENT 4 dw 16 dup (0) 5 stacksg ENDS 6 7 8 9 codesg SEGMENT10 11 start: mov ax, 012 mov es, ax13 mov di, 200h14 mov ax, cs15 mov ds, ax...
阅读全文
摘要:1 ;call 的时候ip入栈 2 assume cs : codesg, ds : datasg, ss : stacksg 3 4 datasg SEGMENT 5 db '19751976197719781979','1980','1981','1982','1983','1984','1985','1986','1987','1988','1989','1990','1991',&
阅读全文
摘要:1 ;解决除法溢出的子程序,(商为32位时的溢出) 2 assume cs : codesg, ds : datasg, ss : stacksg 3 4 datasg SEGMENT 5 db 'welcome to masm!' 6 datasg ENDS 7 8 stacksg SEGMENT 9 dw 8 dup (0)10 stacksg ENDS11 12 codesg SEGMENT13 14 15 start: 16 mov ax, stacksg17 mov ss, ax18 mov sp, 1619 20 mov ax, 4240h21 mov dx, 0f
阅读全文
摘要:1 ;16位汇编 BX、BP、SI、DI 才能间接寻址, ax不行 2 ;程序开始时cx大小是程序的长度 3 ;存储器不能到存储器 mov/add 4 5 assume cs : codesg, ds : datasg, ss : stacksg 6 7 datasg SEGMENT 8 db '19751976197719781979','1977','1977','1977','1977','1977','1977','1977','1977',&
阅读全文
摘要:View Code assume cs : codesg, ds : datasg, ss : stacksgdatasg SEGMENT ...datasg ENDSstacksg SEGMENT ...stacksg ENDScodesg SEGMENTstart: ... ... codesg ENDSEND start上面是基本框架。寄存器有ax, bx, cx, dx, es, ds, ss, si, di, sp, bp, ip, psw下面总结下今天学到的:立即数不能作用于段寄存器;间接寻址不能用ax(即[ax]不能用),只能用bx, si,...
阅读全文
|