- [springaccount] 请问下我虚拟机安装完毕后怎么还不行调试哦 能否请大虾给个完整的调试过程呢 谢拉 03/31 20:25
- [michael1947] 一个软盘怎么分的A和B,我知道0面为A,1面为B,可是怎么让DOS系统知道啊,我这里输入B:,就提示 03/05 17:13
- [游客] 我按照你说的帖子用bochs模拟了dos,然后就不知道该干什么了。。。。。。到底应该如何验证啊?怎么 12/24 15:36
- [游客] 花了8天60+小时,中间的曲折和艰辛实在是。。。不过还好我挺过来了,一直一直没有放弃,我坚信付出总会 07/14 13:39
- [游客] 因为nochar 就表示非ASCII键 即没有对应ASCII的键盘输入 所以我用扫描码来判断 06/30 14:19
- [游客] 我觉得你的程序没有什么逻辑上的问题啊。出现了你的错误提示,说明这个输入的字符ascii码小于20H, 06/30 11:53
- [游客] 嗯。我觉得,不能in 16H等待键盘输入,别的就不能运行了不是,所以,肯定应该开中断的。 06/23 15:32
- [zhenglxd] 回楼上的这个 out of range是我自己设计的,如果当ah>3 或者al>7 就会提示out 06/23 09:47
- [游客] 功能设计的不错。不过在运行过程中,设置完背景色后,就会出错退出。博主自己在检查一下。在command 06/20 12:05
- [游客] 苍天弄人,亦成人 支持博主 06/19 20:59
[2009-07-13 17:03] 终于圆满了~课程设计二搞定!
;花了8天60+小时,中间的曲折和艰辛实在是。。。不过还好我挺过来了,一直一直没有放弃,我坚信付出总会有回报的!
assume cs:code
code segment
start:mov ax,cs
mov es,ax
mov bx,offset write_floppy
mov ah,3 ;write
mov al,1 ;total sector
mov ch,0 ;track number
mov cl,1 ;sector number
mov dh,0 ;side number
mov dl,0 ;floppy number
int 13h
;引导程序写入0面0道1扇区
mov bx,offset int7ch_start2
mov ah,3 ;write
mov al,4 ;total sector
mov ch,0 ;track number
mov cl,2 ;sector number
mov dh,0 ;side number
mov dl,0 ;floppy number
int 13h
;int 7ch安装程序写入0面0道2~8扇区
mov ax,4c00h
int 21h
write_floppy:
mov ax,0
mov es,ax
mov bx,7e00H
mov ah,2 ;read
mov al,4 ;total sector
mov ch,0 ;track number
mov cl,2 ;sector number
mov dh,0 ;side number
mov dl,0 ;floppy number
int 13h
mov bx,offset int7ch_start
push bx
ret
;floppy引导调用int 7ch来完成课程设计2
org 7e00h
int7ch_start2:
choose:db '1) reset pc '
db '2) start system '
db '3) clock '
db '4) set clock '
db 'please enter number (1-4): ',0
char_stack:
db 32 dup(0)
cmos_date_sep:
db ' ',':',':',' ','/','/'
cmos_date_address:
db 0,2,4,7,8,9 ;从cmos读取数据的地址
CMOS_range:
db '9','1','3','2','6','6' ;Y\M\D\h\m\s range
CMOS_range2:
db '9','2','1','4','0','0'
CMOS_temp:
db 0,0
CMOS_temp2:
db 16 dup (0)
set_time:
db 'Set year: '
db 'Set month: '
db 'Set day: '
db 'Set hour: '
db 'Set minute: '
db 'Set second: '
db 'save or not?Y/N:'
process_table:
dw offset choose1
dw offset choose2
dw offset choose3
dw offset choose4
temp_stack:
db 128 dup (0)
int9_old_addr:
dw 2 dup(0)
int7ch_start:
mov bx,cs
mov ss,bx
mov sp,7c00h
run_clear_screen:
call clear_screen
show_choose:
mov ax,0b800h
mov es,ax
mov ax,cs
mov ds,ax
mov si,offset choose
mov di,11*160+33*2
cld
mov cx,4
sc_0:push cx
mov cx,16
sc_1:movsb
mov byte ptr es:[di],4 ;red colour
inc di
loop sc_1
add di,1*128 ;newline
pop cx
loop sc_0
mov bx,2 ;bh=0,bl=2(colour=green)
mov di,23*160
call showstr ;show "please entry number:"
;列出功能选项和请求输入
mov si,offset char_stack
mov bx,7 ;默认前后景
call char_stk_clr
digital1_4:mov ah,0 ;only input digit 1-4
sti
int 16h
cmp al,'1'
jb digital1_4
cmp al,'4'
ja digital1_4
mov cs:[si],al
call showstr
input_over:mov ah,0 ;only input enter or backspace
int 16h
cmp ah,1cH
je enter
cmp ah,0eH
je backspace
jmp input_over
;允许显示输入的字符窜1~4,输入的量为1个
backspace:push bx
mov bh,1
call showstr
pop bx
mov byte ptr ss:[si],0
dec si
jmp digital1_4
enter:mov bx,offset char_stack
mov al,cs:[bx]
sub al,49
shl al,1
mov bl,al
mov bh,0
add bx,offset process_table
jmp word ptr cs:[bx]
char_stk_clr:push cx
push bx
mov cx,32
mov bx,offset char_stack
lpclr:mov byte ptr cs:[bx],0
inc bx
loop lpclr
pop bx
pop cx
ret
clear_screen:push bx
push es
push cx
mov bx,0b800H
mov es,bx
mov bx,0
mov cx,2000
show_blank:mov byte ptr es:[bx],' '
add bx,2
loop show_blank
pop cx
pop es
pop bx
ret
showstr:push ds
push es
push si
mov si,ss
mov ds,si ;ds=ss
mov si,0b800h
mov es,si ;es=0b800H
pop si
cmp bh,1
je subshowstr
cld
lps:cmp byte ptr ds:[si],0
je over
movsb
mov byte ptr es:[di],bl
inc di
jmp lps
subshowstr:dec di
dec di
mov word ptr es:[di],' '
over: pop es
pop ds
ret
;showstr作用:显示字符,必要参数si=源地址址,di=目标地址
; 默认参数 ds=ss,es=0b800h
; 可选参数 bx, bl=颜色,bh=1为启动subshowstr
choose1:mov ax,0FFFFH
push ax
mov ax,0
push ax
retf
;reset pc
choose2:mov ax,0
push ax
mov es,ax
mov bx,7c00H
push bx
mov ah,2 ;read
mov al,1 ;total sector
mov ch,0 ;track number
mov cl,1 ;sector number
mov dh,0 ;side number
mov dl,80H ;Hard disk number(c:)
int 13h
retf
;start system
;读硬盘c0面0道1扇区入0:7c00H,后加载操作系统
choose3: push ax
push bx
mov ax,cs:[9*4] ;int9 old entry ip addr
mov bx,offset int9_old_addr
mov cs:[bx],ax
mov ax,cs:[9*4+2] ;int9 old entry seg addr
mov cs:[bx+2],ax
mov word ptr cs:[9*4],offset int9_start
mov word ptr cs:[9*4+2],0
;write int9 new entry ip and seg address
pop bx
pop ax
jmp choose3_start
int9_start:push si
push ax
in al,60h
mov si,offset int9_old_addr
pushf
call dword ptr cs:[si]
cmp al,01
je Esc_key
cmp al,3bH
je F1_key
int9_ret:pop ax
pop si
iret
Esc_key:mov ax,0
mov es,ax
mov bx,offset int9_old_addr
mov ax,cs:[bx]
mov es:[9*4],ax
mov bx,cs:[bx+2]
mov es:[9*4+2],bx ;原来int9地址还原程序
pop ax
pop si
pop ax
pop ax
;clear invalid data
mov ax,cs
push ax
mov ax,offset run_clear_screen
push ax
iret
;return initial interface
F1_key:inc bh
jmp int9_ret
choose3_start:
call clear_screen
mov cx,0b800H
mov es,cx
mov bh,7 ;default colour
cycle:mov si,0
mov cx,6
mov di,offset cmos_date_address
show_date:
mov al,cs:[di+5]
mov bl,cs:[di-1] ;bl=sep ASCII
call in_CMOS
mov es:[si+12*160+34*2],ah
add si,2
mov es:[si+12*160+34*2],al
add si,2
mov es:[si+12*160+34*2],bl
add si,2
dec di
loop show_date
mov si,0
mov cx,18
color:mov es:[si+12*160+34*2+1],bh
add si,2
loop color
jmp cycle
in_CMOS:
out 70H,al ;写入要访问的字节单元
in al,71h
mov ah,al
push cx
mov cl,4
shr ah,cl ;十位数 ASCII
add ah,30H
and al,00001111b ;个位数 ASCII
add al,30H
pop cx
ret
;按al地址读取CMOS中数据并且ah=十位数 ASCII al=个位数 ASCII
choose4:
mov bl,7 ;colour
mov bh,0 ;parameter of CMOS
mov di,0
mov si,offset set_time
mov cx,cs
mov ds,cx
mov cx,0b800H
mov es,cx
call clear_screen
mov cx,6
CMOS_0:push cx
push bx ;number range
mov cx,16
CMOS_1:movsb
mov byte ptr es:[di],2 ;colour
inc di
loop CMOS_1
push si
push di
call char_stk_clr ;清空字符栈
mov si,offset char_stack ;每次输入字符从字符栈0地址开始
call get_date
pop di
add di,128 ;newline
pop si
pop bx
inc bh
pop cx
loop CMOS_0
mov cx,16
CMOS_2:movsb
mov byte ptr es:[di],4 ;colour=red
inc di
loop CMOS_2
call char_stk_clr ;清空字符栈
mov si,offset char_stack
CMOS_3:mov ah,0
int 16h
cmp al,'y'
je end_dig
cmp al,'Y'
je end_dig
cmp al,'N'
je end_dig
cmp al,'n'
je end_dig
jmp CMOS_3
get_date:mov al,bh
mov ah,0
push bx
mov bx,offset CMOS_temp
mov cs:[bx],ax
pop bx
push si
mov si,offset CMOS_range
add si,ax
mov bh,cs:[si] ;bh=function number
mov dh,cs:[si+6] ;dh=maximum value of top digit
pop si
tens_place:call get_input2
cmp al,'0'
je less_than_10
jb tens_place
cmp al,bh
ja tens_place
mov cs:[si],al ;if tens digit's not zero and in the range of valid entry
call showstr
high_than_10:cmp al,bh
jb get_0_9 ;所有个位数允许0~9的批处理掉
ret_t: call get_input2
cmp al,'0'
jb ret_t
cmp al,dh
ja ret_t
jmp end_dig
get_0_9:call get_input2
cmp al,'0'
jb get_0_9
cmp al,'9'
ja get_0_9
jmp end_dig
end_dig:mov cs:[si],al
call showstr
push bx
mov bx,2 ;get_input2's parameter
call get_input2 ;收尾
;第二个数字送入显存,跳转到收尾程序
jump_tens_place:jmp tens_place
less_than_10:mov cs:[si],al
call showstr
less_than_10b:call get_input2
cmp bh,'1'
je above1
cmp bh,'3'
je above1
cmp al,'0'
jb less_than_10b
jmp above0
above1:cmp al,'1'
jb less_than_10b
above0:cmp al,'9'
ja less_than_10b
jmp end_dig
;小于十的量,如果是月和日必须大于1,其他必须大于0
get_input2:
mov ah,0
int 16h
cmp ah,1cH
je key_key
cmp ah,0eH
je key_key
cmp bx,2
je get_input2
ret
key_key:add sp,2
cmp bx,2
jne nor1
pop bx
nor1:cmp ah,1cH
je enter_key
cmp ah,0eH
je backspace_key
;功能检测到enter和backspace键输入作出相应跳转,
;如果bx=2,则作为收尾程序
backspace_key:
cmp si,offset char_stack
je jump_tens_place
cmp si,offset char_stack+1
je CMOS_one
push bx
mov bx,offset char_stack
mov bl,cs:[bx]
cmp bl,'0'
mov al,bl
pop bx
je del_less_than_10
call backspace_2
jmp high_than_10
CMOS_one: mov al,cs:[si-1]
cmp al,'9'
jna del_tens_place
CMOS_bk:call backspace_2
jmp CMOS_3
del_tens_place:
call backspace_2
jmp tens_place
backspace_2:
push bx
mov bh,1
call showstr
pop bx
mov byte ptr cs:[si],0
dec si
ret
del_less_than_10:
call backspace_2
jmp less_than_10b
enter_key:
cmp si,offset char_stack
je no_change
mov al,cs:[si-1]
cmp al,'9'
ja CMOS_K
cmp si,offset char_stack+1
je del_tens_place
mov bx,offset char_stack
mov bx,cs:[bx]
sub bl,30H
sub bh,30H
mov al,bl
mov cx,4
shl al,cl
or al,bh
mov bx,offset CMOS_temp
mov si,cs:[bx]
mov cs:[bx+si+2],al
ret
CMOS_K:cmp al,'y'
je CMOS_set_yes
cmp al,'Y'
je CMOS_set_yes
jmp choose4
CMOS_set_yes:
mov bx,offset CMOS_temp2
mov cx,6
mov si,offset cmos_date_address+5
CMOS_X:
mov al,cs:[si]
out 70h,al
mov al,cs:[bx]
out 71h,al
inc bx
dec si
loop CMOS_X
jmp run_clear_screen
no_change:
mov bx,offset CMOS_temp
mov bx,cs:[bx]
push bx
mov ax,bx
mov bx,offset cmos_date_address+5
sub bx,ax
mov al,cs:[bx]
out 70H,al
in al,71h
pop si
mov bx,offset CMOS_temp2
mov cs:[bx+si],al
mov ah,al
push cx
mov cl,4
shr ah,cl ;十位数 ASCII
add ah,30H
and al,00001111b ;个位数 ASCII
add al,30H
pop cx
mov es:[di],ah
add di,2
mov es:[di],al
add di,2
ret
int7ch_end:nop
code ends
end start
assume cs:code
code segment
start:mov ax,cs
mov es,ax
mov bx,offset write_floppy
mov ah,3 ;write
mov al,1 ;total sector
mov ch,0 ;track number
mov cl,1 ;sector number
mov dh,0 ;side number
mov dl,0 ;floppy number
int 13h
;引导程序写入0面0道1扇区
mov bx,offset int7ch_start2
mov ah,3 ;write
mov al,4 ;total sector
mov ch,0 ;track number
mov cl,2 ;sector number
mov dh,0 ;side number
mov dl,0 ;floppy number
int 13h
;int 7ch安装程序写入0面0道2~8扇区
mov ax,4c00h
int 21h
write_floppy:
mov ax,0
mov es,ax
mov bx,7e00H
mov ah,2 ;read
mov al,4 ;total sector
mov ch,0 ;track number
mov cl,2 ;sector number
mov dh,0 ;side number
mov dl,0 ;floppy number
int 13h
mov bx,offset int7ch_start
push bx
ret
;floppy引导调用int 7ch来完成课程设计2
org 7e00h
int7ch_start2:
choose:db '1) reset pc '
db '2) start system '
db '3) clock '
db '4) set clock '
db 'please enter number (1-4): ',0
char_stack:
db 32 dup(0)
cmos_date_sep:
db ' ',':',':',' ','/','/'
cmos_date_address:
db 0,2,4,7,8,9 ;从cmos读取数据的地址
CMOS_range:
db '9','1','3','2','6','6' ;Y\M\D\h\m\s range
CMOS_range2:
db '9','2','1','4','0','0'
CMOS_temp:
db 0,0
CMOS_temp2:
db 16 dup (0)
set_time:
db 'Set year: '
db 'Set month: '
db 'Set day: '
db 'Set hour: '
db 'Set minute: '
db 'Set second: '
db 'save or not?Y/N:'
process_table:
dw offset choose1
dw offset choose2
dw offset choose3
dw offset choose4
temp_stack:
db 128 dup (0)
int9_old_addr:
dw 2 dup(0)
int7ch_start:
mov bx,cs
mov ss,bx
mov sp,7c00h
run_clear_screen:
call clear_screen
show_choose:
mov ax,0b800h
mov es,ax
mov ax,cs
mov ds,ax
mov si,offset choose
mov di,11*160+33*2
cld
mov cx,4
sc_0:push cx
mov cx,16
sc_1:movsb
mov byte ptr es:[di],4 ;red colour
inc di
loop sc_1
add di,1*128 ;newline
pop cx
loop sc_0
mov bx,2 ;bh=0,bl=2(colour=green)
mov di,23*160
call showstr ;show "please entry number:"
;列出功能选项和请求输入
mov si,offset char_stack
mov bx,7 ;默认前后景
call char_stk_clr
digital1_4:mov ah,0 ;only input digit 1-4
sti
int 16h
cmp al,'1'
jb digital1_4
cmp al,'4'
ja digital1_4
mov cs:[si],al
call showstr
input_over:mov ah,0 ;only input enter or backspace
int 16h
cmp ah,1cH
je enter
cmp ah,0eH
je backspace
jmp input_over
;允许显示输入的字符窜1~4,输入的量为1个
backspace:push bx
mov bh,1
call showstr
pop bx
mov byte ptr ss:[si],0
dec si
jmp digital1_4
enter:mov bx,offset char_stack
mov al,cs:[bx]
sub al,49
shl al,1
mov bl,al
mov bh,0
add bx,offset process_table
jmp word ptr cs:[bx]
char_stk_clr:push cx
push bx
mov cx,32
mov bx,offset char_stack
lpclr:mov byte ptr cs:[bx],0
inc bx
loop lpclr
pop bx
pop cx
ret
clear_screen:push bx
push es
push cx
mov bx,0b800H
mov es,bx
mov bx,0
mov cx,2000
show_blank:mov byte ptr es:[bx],' '
add bx,2
loop show_blank
pop cx
pop es
pop bx
ret
showstr:push ds
push es
push si
mov si,ss
mov ds,si ;ds=ss
mov si,0b800h
mov es,si ;es=0b800H
pop si
cmp bh,1
je subshowstr
cld
lps:cmp byte ptr ds:[si],0
je over
movsb
mov byte ptr es:[di],bl
inc di
jmp lps
subshowstr:dec di
dec di
mov word ptr es:[di],' '
over: pop es
pop ds
ret
;showstr作用:显示字符,必要参数si=源地址址,di=目标地址
; 默认参数 ds=ss,es=0b800h
; 可选参数 bx, bl=颜色,bh=1为启动subshowstr
choose1:mov ax,0FFFFH
push ax
mov ax,0
push ax
retf
;reset pc
choose2:mov ax,0
push ax
mov es,ax
mov bx,7c00H
push bx
mov ah,2 ;read
mov al,1 ;total sector
mov ch,0 ;track number
mov cl,1 ;sector number
mov dh,0 ;side number
mov dl,80H ;Hard disk number(c:)
int 13h
retf
;start system
;读硬盘c0面0道1扇区入0:7c00H,后加载操作系统
choose3: push ax
push bx
mov ax,cs:[9*4] ;int9 old entry ip addr
mov bx,offset int9_old_addr
mov cs:[bx],ax
mov ax,cs:[9*4+2] ;int9 old entry seg addr
mov cs:[bx+2],ax
mov word ptr cs:[9*4],offset int9_start
mov word ptr cs:[9*4+2],0
;write int9 new entry ip and seg address
pop bx
pop ax
jmp choose3_start
int9_start:push si
push ax
in al,60h
mov si,offset int9_old_addr
pushf
call dword ptr cs:[si]
cmp al,01
je Esc_key
cmp al,3bH
je F1_key
int9_ret:pop ax
pop si
iret
Esc_key:mov ax,0
mov es,ax
mov bx,offset int9_old_addr
mov ax,cs:[bx]
mov es:[9*4],ax
mov bx,cs:[bx+2]
mov es:[9*4+2],bx ;原来int9地址还原程序
pop ax
pop si
pop ax
pop ax
;clear invalid data
mov ax,cs
push ax
mov ax,offset run_clear_screen
push ax
iret
;return initial interface
F1_key:inc bh
jmp int9_ret
choose3_start:
call clear_screen
mov cx,0b800H
mov es,cx
mov bh,7 ;default colour
cycle:mov si,0
mov cx,6
mov di,offset cmos_date_address
show_date:
mov al,cs:[di+5]
mov bl,cs:[di-1] ;bl=sep ASCII
call in_CMOS
mov es:[si+12*160+34*2],ah
add si,2
mov es:[si+12*160+34*2],al
add si,2
mov es:[si+12*160+34*2],bl
add si,2
dec di
loop show_date
mov si,0
mov cx,18
color:mov es:[si+12*160+34*2+1],bh
add si,2
loop color
jmp cycle
in_CMOS:
out 70H,al ;写入要访问的字节单元
in al,71h
mov ah,al
push cx
mov cl,4
shr ah,cl ;十位数 ASCII
add ah,30H
and al,00001111b ;个位数 ASCII
add al,30H
pop cx
ret
;按al地址读取CMOS中数据并且ah=十位数 ASCII al=个位数 ASCII
choose4:
mov bl,7 ;colour
mov bh,0 ;parameter of CMOS
mov di,0
mov si,offset set_time
mov cx,cs
mov ds,cx
mov cx,0b800H
mov es,cx
call clear_screen
mov cx,6
CMOS_0:push cx
push bx ;number range
mov cx,16
CMOS_1:movsb
mov byte ptr es:[di],2 ;colour
inc di
loop CMOS_1
push si
push di
call char_stk_clr ;清空字符栈
mov si,offset char_stack ;每次输入字符从字符栈0地址开始
call get_date
pop di
add di,128 ;newline
pop si
pop bx
inc bh
pop cx
loop CMOS_0
mov cx,16
CMOS_2:movsb
mov byte ptr es:[di],4 ;colour=red
inc di
loop CMOS_2
call char_stk_clr ;清空字符栈
mov si,offset char_stack
CMOS_3:mov ah,0
int 16h
cmp al,'y'
je end_dig
cmp al,'Y'
je end_dig
cmp al,'N'
je end_dig
cmp al,'n'
je end_dig
jmp CMOS_3
get_date:mov al,bh
mov ah,0
push bx
mov bx,offset CMOS_temp
mov cs:[bx],ax
pop bx
push si
mov si,offset CMOS_range
add si,ax
mov bh,cs:[si] ;bh=function number
mov dh,cs:[si+6] ;dh=maximum value of top digit
pop si
tens_place:call get_input2
cmp al,'0'
je less_than_10
jb tens_place
cmp al,bh
ja tens_place
mov cs:[si],al ;if tens digit's not zero and in the range of valid entry
call showstr
high_than_10:cmp al,bh
jb get_0_9 ;所有个位数允许0~9的批处理掉
ret_t: call get_input2
cmp al,'0'
jb ret_t
cmp al,dh
ja ret_t
jmp end_dig
get_0_9:call get_input2
cmp al,'0'
jb get_0_9
cmp al,'9'
ja get_0_9
jmp end_dig
end_dig:mov cs:[si],al
call showstr
push bx
mov bx,2 ;get_input2's parameter
call get_input2 ;收尾
;第二个数字送入显存,跳转到收尾程序
jump_tens_place:jmp tens_place
less_than_10:mov cs:[si],al
call showstr
less_than_10b:call get_input2
cmp bh,'1'
je above1
cmp bh,'3'
je above1
cmp al,'0'
jb less_than_10b
jmp above0
above1:cmp al,'1'
jb less_than_10b
above0:cmp al,'9'
ja less_than_10b
jmp end_dig
;小于十的量,如果是月和日必须大于1,其他必须大于0
get_input2:
mov ah,0
int 16h
cmp ah,1cH
je key_key
cmp ah,0eH
je key_key
cmp bx,2
je get_input2
ret
key_key:add sp,2
cmp bx,2
jne nor1
pop bx
nor1:cmp ah,1cH
je enter_key
cmp ah,0eH
je backspace_key
;功能检测到enter和backspace键输入作出相应跳转,
;如果bx=2,则作为收尾程序
backspace_key:
cmp si,offset char_stack
je jump_tens_place
cmp si,offset char_stack+1
je CMOS_one
push bx
mov bx,offset char_stack
mov bl,cs:[bx]
cmp bl,'0'
mov al,bl
pop bx
je del_less_than_10
call backspace_2
jmp high_than_10
CMOS_one: mov al,cs:[si-1]
cmp al,'9'
jna del_tens_place
CMOS_bk:call backspace_2
jmp CMOS_3
del_tens_place:
call backspace_2
jmp tens_place
backspace_2:
push bx
mov bh,1
call showstr
pop bx
mov byte ptr cs:[si],0
dec si
ret
del_less_than_10:
call backspace_2
jmp less_than_10b
enter_key:
cmp si,offset char_stack
je no_change
mov al,cs:[si-1]
cmp al,'9'
ja CMOS_K
cmp si,offset char_stack+1
je del_tens_place
mov bx,offset char_stack
mov bx,cs:[bx]
sub bl,30H
sub bh,30H
mov al,bl
mov cx,4
shl al,cl
or al,bh
mov bx,offset CMOS_temp
mov si,cs:[bx]
mov cs:[bx+si+2],al
ret
CMOS_K:cmp al,'y'
je CMOS_set_yes
cmp al,'Y'
je CMOS_set_yes
jmp choose4
CMOS_set_yes:
mov bx,offset CMOS_temp2
mov cx,6
mov si,offset cmos_date_address+5
CMOS_X:
mov al,cs:[si]
out 70h,al
mov al,cs:[bx]
out 71h,al
inc bx
dec si
loop CMOS_X
jmp run_clear_screen
no_change:
mov bx,offset CMOS_temp
mov bx,cs:[bx]
push bx
mov ax,bx
mov bx,offset cmos_date_address+5
sub bx,ax
mov al,cs:[bx]
out 70H,al
in al,71h
pop si
mov bx,offset CMOS_temp2
mov cs:[bx+si],al
mov ah,al
push cx
mov cl,4
shr ah,cl ;十位数 ASCII
add ah,30H
and al,00001111b ;个位数 ASCII
add al,30H
pop cx
mov es:[di],ah
add di,2
mov es:[di],al
add di,2
ret
int7ch_end:nop
code ends
end start
评论次数(2) |
浏览次数(1681) |
类型(汇编作业) |
收藏此文 |
[ 游客 发表于 2009-07-14 13:39 ]
花了8天60+小时,中间的曲折和艰辛实在是。。。不过还好我挺过来了,一直一直没有放弃,我坚信付出总会有回报的!
==================
太厉害了!!佩服。
[ springaccount 发表于 2011-03-31 20:25 ]
请问下我虚拟机安装完毕后怎么还不行调试哦 能否请大虾给个完整的调试过程呢 谢拉