汇编
甘甘甘甘甘甘甘
码不停题
展开
-
实验10.2|除法溢出
除法溢出解析:首先观察公式,我们发现公式左边涉及到的除法中,除数都是N为16位,所以被除数都应该是32位的,意味着涉及到dx和ax两个寄存器来表示被除数。其次乘以65536是什么意思呢?在16位的寄存器中,我们是表示不了65536的,因为只能表示0~65535否则会提示溢出。这里乘65536实际上相当于乘以10000H即左移16位的意思,相当于将被乘数放在高16位。(这点很重要)现在再...原创 2019-08-26 09:51:45 · 1430 阅读 · 0 评论 -
实验10.3|dtoc
dtocassume cs:codedata segment db 10 dup (0) data endscode segment start: mov ax,12666 mov bx,data mov ds,bx mov si,0 call dtoc mov dh,8 mov dl,3 mov cl,2 call show_str mov ax...原创 2019-08-26 14:08:15 · 647 阅读 · 0 评论 -
letterc
lettercassume cs:codedata segment db "Beginner's All-purpose Symbolic Instruction Code.",0data endscode segment begin: mov ax,data mov ds,ax mov si,0 call letterc mov ax,4C00H int 2...原创 2019-08-28 13:48:21 · 189 阅读 · 0 评论 -
编写CPU 0号中断处理程序
编写CPU 0号中断处理程序下面的程序实现将0号中断处理程序放进内存中一段不会被调用的空间内,以确保CPU除法溢出时始终能够调用到对应的中断处理程序。因此首先要解决的问题就是,寻找一段系统不会占用的内存空间,这里确定为0000:0200H后的一段空间,事实上这段空间属于中断向量表的空间,只是不存在对应的中断向量。接下来只需解决两个问题:安装中断处理程序设置中断向量表,将0号中断向量指...原创 2019-08-28 20:10:29 · 532 阅读 · 0 评论 -
int配合iret实现loop功能
int配合iret实现loop功能要实现loop功能,我们的中断例程就要能够修改CS和IP,指向S标号。所以我们要取得S标号的段地址和偏移地址。在CPU响应中断的中断过程中,CS、IP会先后入栈,此时栈中存放的正式S标号的段地址,se标号的偏移地址,所以我们可以直接得到S标号的段地址,间接得到S标号的偏移地址(se标号的偏移地址+转移位移)那么之后如何修改CS和IP呢?我们知道,iret指...原创 2019-08-29 11:42:08 · 397 阅读 · 0 评论 -
int指令
int指令int指令能够引发中断,调用中断例程。在BIOS和DOS中,两者都提供了中断例程可供编程人员调用。在汇编中使用int10h并传递适当的参数可以使计算机重置光标的位置,这个中断例程是由BIOS提供的;而使用int21h,则可以使程序返回DOS或者显示指定的字符串。我们可以看出,实际上这里的中断例程就像是被封装好的程序,BIOS和DOS提供这些封装好的程序给我们使用,我们只需要传递合适...原创 2019-08-29 19:35:16 · 1752 阅读 · 0 评论 -
实验14|访问CMOS RAM
实验14|访问CMOS RAMassume cs:code code segment string:db '00/02/04 06:08:10',0 adress:db 9,8,7,4,2,0 start: mov ax,cs mov ds,ax mov di,0 mov si,0 mov ax,0b800h mov es,ax mov ah,2 mov cx,...原创 2019-08-30 19:52:01 · 235 阅读 · 0 评论 -
编写包含多个功能子程序的中断例程|直接定址表的相对偏移地址问题
直接定址表的相对偏移地址问题一开始定义的偏移地址如下table dw f1,f2,f3,f4程序不能正常运行,debug发现,偏移地址偏移量过大造成的。原来保存在table中诸如f1之类的偏移地址实际上是在安装程序进行编译时产生的,也就是说该偏移地址相对标号start处偏移的。而程序安装进内存0000:0200h后作为一个独立的中断例程,本应该相对标号setscreen偏移。所以,我们...原创 2019-09-03 22:02:13 · 359 阅读 · 0 评论