代码已经在虚拟机Bochs和VirtualPC2007中测试过了,但是不知道是什么原因,在Bochs虚拟机中,ResetPC就是跳转到0FFFFH:0H无法顺利执行,改成0F000H:0FFF0H也无法顺利执行。而在VirtualPC中却可以顺利执行的。
由于代码超过了512字节,需要2个扇区,所以第一个扇区的作用是读取第2、3个扇区到指定内存处,然后跳转去执行。
代码如下:
assume cs:code
code segment
org 0h
myos:
;Now CS:IP = 0:7c00h
xor ax,ax
mov ds,ax
...
- [starrynight] 注:我只注意到了结果为90H,此时最高位为1,但是忘了结果是整个ax寄存器,而不仅仅是al。所以最后 04/24 22:31
- [游客] Dei ho <a href='http://无效链接' >nelle inmobiliarias 02/26 08:34
- [游客] Questi http://无效链接/friuli-venezia-giulia-incontro 02/26 05:44
- [游客] Abbiamo http://无效链接 centro tre <a href='http://无效链 02/26 00:56
- [游客] Da http://无效链接 stesso altri <a href='http://无效链接' 02/25 08:32
- [游客] Sarebbe meno <a href='http://无效链接' >pop rock degli 02/21 01:18
- [游客] 学习了,比较写得好! 01/13 10:42
- [mouse] 博主没有自己debug看吧,结果不对 01/12 08:49
- [lijangwei] 我也是这样想的 12/12 20:28
- [游客] 在 Bochs x86 Emulator 2.1.1 环境事了一下 看起来挺精致,要是设置时间 11/20 17:16
[2007-11-20 11:24] 课程设计2
阅读全文 |
评论次数(6) |
浏览次数(924) |
所属类型(汇编作业)
[2007-11-14 08:54] 检测点17.1
在int 16h中断例程中,程序要监视键盘缓冲区中是否有数据,在此期间,必须允许数据写入到缓冲区中,而这是int 9中断的功能,所以在int 16h中断例程中肯定有'sti'指令设置IF=1从而使CPU在int 16h中断时可以处理int 9这个可屏蔽中断。...
阅读全文 |
评论次数(2) |
浏览次数(805) |
所属类型(汇编作业)
[2007-11-14 08:49] 实验16 编写包含多个子程序的中断
assume cs:code,ss:stack
stack segment
db 32 dup (0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,32
mov ax,0
mov es,ax
mov di,200h
push cs
pop ds
mov si,offset int7ch
mov cx,offset int7chend - offset int7ch
cld
...
stack segment
db 32 dup (0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,32
mov ax,0
mov es,ax
mov di,200h
push cs
pop ds
mov si,offset int7ch
mov cx,offset int7chend - offset int7ch
cld
...
阅读全文 |
评论次数(1) |
浏览次数(570) |
所属类型(汇编作业)
[2007-11-13 10:19] 检测点16.2
填空中应该填入:
mov ax,data
mov es,ax
由于在assume伪指令中有"es:data",而且在汇编后可以发现传输指令的段前缀为es,故需要将data段的段地址传给es寄存器。...
mov ax,data
mov es,ax
由于在assume伪指令中有"es:data",而且在汇编后可以发现传输指令的段前缀为es,故需要将data段的段地址传给es寄存器。...
阅读全文 |
评论次数(1) |
浏览次数(645) |
所属类型(汇编作业)
[2007-11-13 10:11] 检测点16.1
assume cs:code
code segment
a dw 1,2,3,4,5,6,7,8
b dd 0
start:
mov si,0
mov cx,8
s:
mov ax,a[si]
add word ptr b,ax
adc word ptr b[2],0
add si,2
loop s
mov ax,4c00h
int 21h
code ends
end start...
code segment
a dw 1,2,3,4,5,6,7,8
b dd 0
start:
mov si,0
mov cx,8
s:
mov ax,a[si]
add word ptr b,ax
adc word ptr b[2],0
add si,2
loop s
mov ax,4c00h
int 21h
code ends
end start...
阅读全文 |
评论次数(2) |
浏览次数(545) |
所属类型(汇编作业)
[2007-11-13 09:55] 实验15 安装新的int9中断
代码如下:
;Install new int9 interuppt
assume cs:code,ss:stack
stack segment
db 64 dup (0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,64
mov ax,0
mov es,ax
mov di,204h
mov ax,cs
mov ds,ax
mov si,offset int9
mov cx,...
;Install new int9 interuppt
assume cs:code,ss:stack
stack segment
db 64 dup (0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,64
mov ax,0
mov es,ax
mov di,204h
mov ax,cs
mov ds,ax
mov si,offset int9
mov cx,...
阅读全文 |
评论次数(1) |
浏览次数(580) |
所属类型(汇编作业)
[2007-11-12 15:34] 检测点15.1
1、程序可以精简为
pushf
call dword ptr ds:[0]
2、
程序有两处设置int9中断例程的段地址和偏移地址,分别是在将int9中断例程设置为自己编写的中断例程和程序最后恢复原来的int9中断例程。为了防止在设置段地址和偏移地址指令间时发生键盘输入,产生错误,需要在设置前将IF标志位清0,设置完成后设为1就可以了。
程序改写如下:
assume cs:code
stack segment
db 128 dup (0)
stack ends
data segment
dw 0,0
data ends
code s...
pushf
call dword ptr ds:[0]
2、
程序有两处设置int9中断例程的段地址和偏移地址,分别是在将int9中断例程设置为自己编写的中断例程和程序最后恢复原来的int9中断例程。为了防止在设置段地址和偏移地址指令间时发生键盘输入,产生错误,需要在设置前将IF标志位清0,设置完成后设为1就可以了。
程序改写如下:
assume cs:code
stack segment
db 128 dup (0)
stack ends
data segment
dw 0,0
data ends
code s...
阅读全文 |
评论次数(1) |
浏览次数(535) |
所属类型(汇编作业)
[2007-11-12 14:17] 实验14 访问CMOS RAM
代码如下:
;Display date and time
assume cs:code
code segment
db "20??/??/?? ??:??:??",'$'
portno:
db 9,8,7,4,2,0
storpos:
dw 2,5,8,11,14,17
start:
mov ax,cs
mov ds,ax ;prepare ds for display string
mov si,offset portno
mov di,offset storpos
mov c...
;Display date and time
assume cs:code
code segment
db "20??/??/?? ??:??:??",'$'
portno:
db 9,8,7,4,2,0
storpos:
dw 2,5,8,11,14,17
start:
mov ax,cs
mov ds,ax ;prepare ds for display string
mov si,offset portno
mov di,offset storpos
mov c...
阅读全文 |
评论次数(2) |
浏览次数(752) |
所属类型(汇编作业)
[2007-11-12 09:11] 检测点14.2
shl ax,1
mov bx,ax ;(bx)=(ax)*2
mov cl,2
shl ax,cl ;(ax)=(原来ax)*8
add ax,bx...
mov bx,ax ;(bx)=(ax)*2
mov cl,2
shl ax,cl ;(ax)=(原来ax)*8
add ax,bx...
阅读全文 |
评论次数(2) |
浏览次数(664) |
所属类型(汇编作业)
[2007-11-12 09:05] 检测点14.1
1、
mov al,2
out 70h,al
in al,71h
2、
mov al,2
out 70h,al
mov al,0
out 71h,al...
mov al,2
out 70h,al
in al,71h
2、
mov al,2
out 70h,al
mov al,0
out 71h,al...
阅读全文 |
评论次数(1) |
浏览次数(577) |
所属类型(汇编作业)
『 查看更多文章 』