所用软件:vmware 6.5.3 ms-dos 7.0 WinImage
功能说明:
1.重启计算机:把新的cs和ip值入栈,利用retf进行设置。
2.引导现有操作系统:把c盘的1个扇区拷贝到0:7c00处,利用1的方法,进行跳转。
3.显示日期和时间。读取cmos的时间值。按键功能利用中断程序,这里的键盘中断程序只提供给这里。
4.设置日期和时间值。主要是字符串的输入的处理,利用了17章的程序。
主要思路:分三个文件:主文件/中断处理文件/设置日期的文件。计算机开机先扫瞄软盘的1扇区的程序拷贝到0:7c00处,然后因为有...


- [wukong] 这是钱林松老师的课件摘录的,讲的比这还详细 03/07 19:40
- [wukong] 只是方便用户,对象可以向基本类型那样,进行+-等运算。 03/07 19:38
- [chinatree] 不懂,什么书讲这么详细? 03/07 11:20
- [chinatree] 重载不是相同函数只是参数不同吗?运算符怎么重载?作用是什么? 03/07 11:13
- [tomato] c++的基本思想和java基本差不多,只是有一些细节的差别。 03/05 20:33
- [tomato] 我不是什么老师,只是一个搞技术的程序员。 03/05 20:32
- [tomato] 支持你! 03/04 23:07
- [wukong] 是的,一定努力,多动手,谢谢!!! 03/04 22:52
- [tomato] 明白了C++中的构造函数和析构函数,谢谢博主的这篇博文。嘿嘿。 03/04 22:30
- [tomato] 开始学习C++了?不仅要学习知识还要实验才行。 03/04 22:26
[2012-02-09 20:27] 汇编课程设计二
阅读全文 |
评论次数(1) |
浏览次数(594) |
所属类型(默认类型)
[2012-02-01 13:46] 汇编第十七章学习小结
1.当键盘输入时,吧按键的扫描码和对应的ascii码存入键盘缓冲区中。高位字节存储扫描码,地位存储ascii码。
2.int 16h中断例程读取键盘缓冲区的字符 :1>检测键盘缓冲区中是否有数据;2>没有则继续做第一步;3>读取缓冲区第一个字单元中的键盘输入;4>将读取的扫描码送人ah,ascii送人al,5>将已读取的键盘输入从缓冲区中删除。
3.课后习题:
assume cs:code
data segment
db 512 dup(89)
db 512 dup(0)
data ends
code segment...
2.int 16h中断例程读取键盘缓冲区的字符 :1>检测键盘缓冲区中是否有数据;2>没有则继续做第一步;3>读取缓冲区第一个字单元中的键盘输入;4>将读取的扫描码送人ah,ascii送人al,5>将已读取的键盘输入从缓冲区中删除。
3.课后习题:
assume cs:code
data segment
db 512 dup(89)
db 512 dup(0)
data ends
code segment...
阅读全文 |
评论次数(0) |
浏览次数(289) |
所属类型(默认类型)
[2012-01-31 11:22] 汇编第十六章直接定址表小结
1.标号如果带:则表示内存地址,否则表示内存地址和单元长度。
2.后面有:的地址标号,只能在代码段中使用,不能在其他段中使用。
3.如果想在代码段中直接用数据标号访问数据,则需要用伪指令assume将标号所在的段和一个段寄存器联系起来,否则编译器在编译的时候,无法确定标号的段地址在哪一个寄存器中。
4.标号的段地址是在哪个段中定义的就是那个段的段地址。标号包含了段地址和偏移地址。
5.课后习题
CODES SEGMENT
ASSUME CS:CODES
START:
;传输7ch号代码
mov cx,offset int...
2.后面有:的地址标号,只能在代码段中使用,不能在其他段中使用。
3.如果想在代码段中直接用数据标号访问数据,则需要用伪指令assume将标号所在的段和一个段寄存器联系起来,否则编译器在编译的时候,无法确定标号的段地址在哪一个寄存器中。
4.标号的段地址是在哪个段中定义的就是那个段的段地址。标号包含了段地址和偏移地址。
5.课后习题
CODES SEGMENT
ASSUME CS:CODES
START:
;传输7ch号代码
mov cx,offset int...
阅读全文 |
评论次数(3) |
浏览次数(443) |
所属类型(默认类型)
[2012-01-30 20:27] 汇编第十五章外中断小结
1.cpu通过端口和外部设备进行联系。
2.cpu在执行完当前指令后,可以检测到发送过来的中断信息,引发中断过程,处理外设的输入。
3.if是可屏蔽中断的标志位
4.按下键操作时,产生一个扫描码,其说明了按下的键在键盘上的位置。送人60h端口。松开键时,产生一个断码。
5.习题
assume cs:code
stack segment
db 128 dup (0)
stack ends
code segment
start:
;栈区设置
mov ax,stack
mov ss,ax
mov sp,128
;...
2.cpu在执行完当前指令后,可以检测到发送过来的中断信息,引发中断过程,处理外设的输入。
3.if是可屏蔽中断的标志位
4.按下键操作时,产生一个扫描码,其说明了按下的键在键盘上的位置。送人60h端口。松开键时,产生一个断码。
5.习题
assume cs:code
stack segment
db 128 dup (0)
stack ends
code segment
start:
;栈区设置
mov ax,stack
mov ss,ax
mov sp,128
;...
阅读全文 |
评论次数(1) |
浏览次数(314) |
所属类型(默认类型)
[2012-01-29 20:03] 汇编第十四章端口学习小结
1.通过端口,能够对设备进行统一管理,方便,我感觉通过归纳,能够进行统一的处理。
2.课后习题:
没有采用循环的方式,比较机械,一个一个的处理的
CODES SEGMENT
ASSUME CS:CODES
START:
;设置屏幕输出参数
mov bx,0b800h
mov es,bx
mov si,0
;处理年份
mov al,9
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and...
2.课后习题:
没有采用循环的方式,比较机械,一个一个的处理的
CODES SEGMENT
ASSUME CS:CODES
START:
;设置屏幕输出参数
mov bx,0b800h
mov es,bx
mov si,0
;处理年份
mov al,9
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and...
阅读全文 |
评论次数(2) |
浏览次数(301) |
所属类型(默认类型)
[2012-01-29 09:40] 汇编第十三章小结
1.int 指令的最终功能和call指令相似,都是调用一段程序。
2.中断处理程序如果要返回主程序,要使用iret指令。
3.课后习题
1>显示一个以0结尾的字符串
DATAS SEGMENT
;此处输入数据段代码
db "welcomoe to masdfsdfsdfdsfsm!",0
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES
START:
;传输0号代码
mov cx,offset re - offset ch_st0
mov ax,0
mov es,ax
...
2.中断处理程序如果要返回主程序,要使用iret指令。
3.课后习题
1>显示一个以0结尾的字符串
DATAS SEGMENT
;此处输入数据段代码
db "welcomoe to masdfsdfsdfdsfsm!",0
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES
START:
;传输0号代码
mov cx,offset re - offset ch_st0
mov ax,0
mov es,ax
...
阅读全文 |
评论次数(1) |
浏览次数(538) |
所属类型(默认类型)
[2012-01-28 12:30] 汇编第十二章内中断小结
1.中断是指CPU不再接着(刚才执行完的指令)向下执行,而是转去处理这个特殊信息。cpu内部有四种中断类型。
2.cpu在接到中断信息后,所引发的中断过程
1>(从中断信息中)取得中断类型码;
2>标志寄存器入栈
3>设置tf=0,if=0
4>cs入栈
5>ip入栈
6>从中断向量表中取得新的ip和cs
3.课后习题
CODES SEGMENT
ASSUME CS:CODES
START:
;传输0号代码
mov cx,offset re - offset error1
mov ax,0
mov es...
2.cpu在接到中断信息后,所引发的中断过程
1>(从中断信息中)取得中断类型码;
2>标志寄存器入栈
3>设置tf=0,if=0
4>cs入栈
5>ip入栈
6>从中断向量表中取得新的ip和cs
3.课后习题
CODES SEGMENT
ASSUME CS:CODES
START:
;传输0号代码
mov cx,offset re - offset error1
mov ax,0
mov es...
阅读全文 |
评论次数(1) |
浏览次数(378) |
所属类型(默认类型)
[2012-01-27 22:53] 第十一章标志寄存器小结
1.溢出标志位of:
带符号数的算术运算结果,若超出了8位或16位数所能表达的范围时,of=1,表示产生溢出;否则of=0.
8位数应该在-128至+127之间,16位数在-32768至+32767.
2.进位标志位cf:
当指令执行的结果在最高位出现进位或借位时,cf=1;否则为0.
3.
cmp(compare)指令进行比较两个操作数的大小
例:cmp oprd1,oprd2
为第一个操作减去第二个操作数,
但不影响第两个操作数的值
它影响flag的CF,ZF,O...
带符号数的算术运算结果,若超出了8位或16位数所能表达的范围时,of=1,表示产生溢出;否则of=0.
8位数应该在-128至+127之间,16位数在-32768至+32767.
2.进位标志位cf:
当指令执行的结果在最高位出现进位或借位时,cf=1;否则为0.
3.
cmp(compare)指令进行比较两个操作数的大小
例:cmp oprd1,oprd2
为第一个操作减去第二个操作数,
但不影响第两个操作数的值
它影响flag的CF,ZF,O...
阅读全文 |
评论次数(1) |
浏览次数(409) |
所属类型(默认类型)
[2012-01-26 18:25] 汇编课程设计一
assume cs:code,ds:data,ss:stack
data segment
db '1975','1976','1977','1978','1979','1980',
'1981','1982','1983','1984','1985','1986','1987',
'1988','1989','1990','1991','1992','1993','1994',
'1995'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530...
data segment
db '1975','1976','1977','1978','1979','1980',
'1981','1982','1983','1984','1985','1986','1987',
'1988','1989','1990','1991','1992','1993','1994',
'1995'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530...
阅读全文 |
评论次数(1) |
浏览次数(308) |
所属类型(默认类型)
[2012-01-25 20:09] 第10章call 和ret指令学习小结(2)
2>解决除法溢出的问题
divdw
参数: (ax)=dword型数据的低16位
(bx)=dword型数据的高16位
(cx)=除数
结果: (dx)=结果的高16位:(ax)=结果的低16位
(cx)=余数
先把高16位进行16位除法,再进行余下的16位除法。
ASSUME CS:CODES,SS:STACKS
stack segment
dw 32 dup(0)
stack ends
CODES SEGMENT
START:
...
divdw
参数: (ax)=dword型数据的低16位
(bx)=dword型数据的高16位
(cx)=除数
结果: (dx)=结果的高16位:(ax)=结果的低16位
(cx)=余数
先把高16位进行16位除法,再进行余下的16位除法。
ASSUME CS:CODES,SS:STACKS
stack segment
dw 32 dup(0)
stack ends
CODES SEGMENT
START:
...
阅读全文 |
评论次数(0) |
浏览次数(249) |
所属类型(默认类型)