;修正了前一个版本日期时间设置函数的bug
;增加局部代码的注释
;对应课题要求,去掉了主菜单对ESC的处理,也去掉了showclk中清空键盘缓冲区的处理
;各功能做了较完整的测试,整个功能比较完整。第17章的内容学习就此结束。
assume cs:code
code segment
main:
;读第二个扇区数据到7e00h
mov ax, 0
mov es, ax
mov bx, 7e00h
mov ah, 2 ;read
mov al, 1 ;读取的扇区数
mov ch, 0 ;磁道号
mov cl, 2 ;扇区号
mov ...
- [heliang6291] 是的,我就在学杨季文的了,这里指令要多很多了。 ORG这个指令是设定指针的。 07/02 12:21
- [fpamc] 嗯哼~不错,待我写完我的再看。 07/02 07:14
- [fpamc] 终于被你发现了。。。 这些东西要慢慢积累的。。。 学完王爽老师的书可以看看杨季文老师的80x86 07/02 07:13
- [smmei] fpamc: 我看了一下论坛上别人写的代码,发现书本上介绍的指令或伪指令还是有限的。比如ORG这个伪 07/01 18:37
- [fpamc] 哈哈,写到中途,由于特殊项目,我放了一放。。 你好快。哇。 06/30 10:23
- [kuci331] en 06/28 21:15
- [fpamc] 没问题 06/24 14:56
- [fpamc] 呵呵。很聪明。 06/24 14:47
- [fpamc] !没问题, 06/24 14:43
- [fpamc] 哈哈,肯定没有进位。。。 因为经过移位/逻辑与处理后,,ah/al最大是09h 没学完呢。 06/18 07:46
[2012-07-02 00:27] 课程设计2 - release
阅读全文 |
评论次数(1) |
浏览次数(449) |
所属类型(汇编作业)
[2012-06-30 03:07] 课程设计2
好久没的扣腚到凌晨,今天竟然扣到三点,才写出了下面的代码。勉强能够实现
功能。设置时间的地方有一点问题。其余的数个地方不具有可移植性,把代码写
死了。无论如何,它可以运行。enjoy ~
assume cs:code
code segment
main:
;读第二个扇区数据到7e00h
mov ax, 0
mov es, ax
mov bx, 7e00h
mov ah, 2 ;read
mov al, 1 ;读取的扇区数
mov ch, 0 ;磁道号
mov cl, 2 ;扇区号
mov dh, 0 ;磁头号
mov dl,...
功能。设置时间的地方有一点问题。其余的数个地方不具有可移植性,把代码写
死了。无论如何,它可以运行。enjoy ~
assume cs:code
code segment
main:
;读第二个扇区数据到7e00h
mov ax, 0
mov es, ax
mov bx, 7e00h
mov ah, 2 ;read
mov al, 1 ;读取的扇区数
mov ch, 0 ;磁道号
mov cl, 2 ;扇区号
mov dh, 0 ;磁头号
mov dl,...
阅读全文 |
评论次数(4) |
浏览次数(452) |
所属类型(汇编作业)
[2012-06-23 16:57] 第17章 使用BIOS进行键盘输入和磁盘读写
17 - 第17章 使用BIOS进行键盘输入和磁盘读写
我是在virtualbox虚拟机里做这些实验的。本章实验需要写软盘,所以要先添加一个软盘设备。在Linux里先做一个软盘的img文件,然后在virtualbox的设置里添加进来。
dd if=/dev/zero of=floppy bs=512 count=2880
先用下面这个程序判断一下是否可以成功读写软盘。注意debug单步调试的时候,int 13h命令时使用-p,然后看其返回结果ah是否为0(成功为0)。
assume cs:code
code segment
start:
; ...
我是在virtualbox虚拟机里做这些实验的。本章实验需要写软盘,所以要先添加一个软盘设备。在Linux里先做一个软盘的img文件,然后在virtualbox的设置里添加进来。
dd if=/dev/zero of=floppy bs=512 count=2880
先用下面这个程序判断一下是否可以成功读写软盘。注意debug单步调试的时候,int 13h命令时使用-p,然后看其返回结果ah是否为0(成功为0)。
assume cs:code
code segment
start:
; ...
阅读全文 |
评论次数(1) |
浏览次数(448) |
所属类型(汇编作业)
[2012-06-22 17:55] 第16章 直接定址表
16 - 第16章 直接定址表
此题稍麻烦的地方是各sub的地址在安装到0:200h之后是有改变的,所以需要我们自己根据安装之前各sub的相对地址来计算最终中断处理程序中要跳转的地址。
assume cs:code
code segment
start:
mov ax, cs
mov ds, ax
mov si, offset int7ch
mov ax, 0
mov es, ax
mov di, 200h
mov cx, ...
此题稍麻烦的地方是各sub的地址在安装到0:200h之后是有改变的,所以需要我们自己根据安装之前各sub的相对地址来计算最终中断处理程序中要跳转的地址。
assume cs:code
code segment
start:
mov ax, cs
mov ds, ax
mov si, offset int7ch
mov ax, 0
mov es, ax
mov di, 200h
mov cx, ...
阅读全文 |
评论次数(1) |
浏览次数(465) |
所属类型(汇编作业)
[2012-06-21 23:39] 第15章 外中断
15 - 第15章 外中断
1. 外设接口芯片的内部有若干寄存器,CPU将这些寄存器当作端口来访问。CPU通过端口来访问外部设备。
2. 外中断源有两类:
(1) 可屏蔽中断, 由状态寄存器中的IF控制, IF=0则不响应可屏蔽中断
(2) 不可屏蔽中断,中断类型码固定为2
3. 扫描码被送入端口60h.
按下键时产生的扫描码为通码,通码第7位为0
松开键时产生的扫描码为断码,断码第7位为1
断码=通码+80h
4. 端口60h收到扫描码时,会向CPU发出中断类型码为9的可屏蔽中断信息。
...
1. 外设接口芯片的内部有若干寄存器,CPU将这些寄存器当作端口来访问。CPU通过端口来访问外部设备。
2. 外中断源有两类:
(1) 可屏蔽中断, 由状态寄存器中的IF控制, IF=0则不响应可屏蔽中断
(2) 不可屏蔽中断,中断类型码固定为2
3. 扫描码被送入端口60h.
按下键时产生的扫描码为通码,通码第7位为0
松开键时产生的扫描码为断码,断码第7位为1
断码=通码+80h
4. 端口60h收到扫描码时,会向CPU发出中断类型码为9的可屏蔽中断信息。
...
阅读全文 |
评论次数(1) |
浏览次数(489) |
所属类型(汇编作业)
[2012-06-16 23:53] 第14章 端口
14 - 第14章 端口
检测点 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
检测点 14.2
========
编程,用加法和移位指令计算(ax)=(ax)*10
; 令ax初值为10
mov ax, 10
mov bx, ax
shl ax, 1
...
检测点 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
检测点 14.2
========
编程,用加法和移位指令计算(ax)=(ax)*10
; 令ax初值为10
mov ax, 10
mov bx, ax
shl ax, 1
...
阅读全文 |
评论次数(4) |
浏览次数(460) |
所属类型(汇编作业)
[2012-06-13 23:33] 第13章 int指令
第13章 int指令
实验13
(1)
(2)
(3)
assume cs:code
code segment
s1: db 'Good,better,best,', '$'
s2: db 'Never let it rest,', '$'
s3: db 'Till good is better,', '$'
s4: db 'And bettter,best,', '$'
s: dw offset s1, offset s2, offset s3, offset s4
row: db 2, 4, 6...
实验13
(1)
(2)
(3)
assume cs:code
code segment
s1: db 'Good,better,best,', '$'
s2: db 'Never let it rest,', '$'
s3: db 'Till good is better,', '$'
s4: db 'And bettter,best,', '$'
s: dw offset s1, offset s2, offset s3, offset s4
row: db 2, 4, 6...
阅读全文 |
评论次数(1) |
浏览次数(321) |
所属类型(汇编作业)
[2012-06-12 23:38] 第12章 内中断
12 - 第12章 内中断
; 设置中断0, div溢出异常,屏幕显示 hello world!
assume cs:codesg
codesg segment
; ds:si -> es:di
start:
mov ax, 0
mov es, ax
mov di, 0200h
mov ax, cs
mov ds, ax
mov si, offset do_start
mov cx, offset do_end - offset do_start
cld
...
; 设置中断0, div溢出异常,屏幕显示 hello world!
assume cs:codesg
codesg segment
; ds:si -> es:di
start:
mov ax, 0
mov es, ax
mov di, 0200h
mov ax, cs
mov ds, ax
mov si, offset do_start
mov cx, offset do_end - offset do_start
cld
...
阅读全文 |
评论次数(2) |
浏览次数(438) |
所属类型(汇编作业)
[2012-06-12 23:38] 第11章 标志寄存器
11 - 第11章 标志寄存器
1. zf 零标志寄存器
相关指令执行后,如果结果为0,则zf=1。否则zf=0。
2. pf 奇偶标志位
相关指令执行后,其结果的所有bit中1的个数是否为偶数。如果为偶数,则pf=1。否则,pf=0。
3. sf 符号标志位
相关指令执行后,其结果是否为负。如果结果为负,则sf=1。否则sf=0。
当我们将数据当作有符号数来运算的时候,可以通过它来得知结果的正负。
如果我们将数据当作无符号数来运算,sf的值则没有意义,虽然相关指令影响了它的值。
4. cf 进...
1. zf 零标志寄存器
相关指令执行后,如果结果为0,则zf=1。否则zf=0。
2. pf 奇偶标志位
相关指令执行后,其结果的所有bit中1的个数是否为偶数。如果为偶数,则pf=1。否则,pf=0。
3. sf 符号标志位
相关指令执行后,其结果是否为负。如果结果为负,则sf=1。否则sf=0。
当我们将数据当作有符号数来运算的时候,可以通过它来得知结果的正负。
如果我们将数据当作无符号数来运算,sf的值则没有意义,虽然相关指令影响了它的值。
4. cf 进...
阅读全文 |
评论次数(1) |
浏览次数(291) |
所属类型(汇编作业)
[2012-06-12 23:36] 第10章 call和ret指令
//博客的验证码终于好了。可以发文了。
//一篇文章只能配一张图片?
10 - 第10章 call和ret指令
1. ret修改ip,相当于:
pop ip
retf 修改ip和cs, 相当于:
pop ip
pop cs
2. call指令进行两步操作
(1) 将当前的ip或cs和ip压入栈中
(2) 转移
call指令有四种类型:
(1) 依据位移进行转移的call指令:call 标号
"call 标号" 相当...
//一篇文章只能配一张图片?
10 - 第10章 call和ret指令
1. ret修改ip,相当于:
pop ip
retf 修改ip和cs, 相当于:
pop ip
pop cs
2. call指令进行两步操作
(1) 将当前的ip或cs和ip压入栈中
(2) 转移
call指令有四种类型:
(1) 依据位移进行转移的call指令:call 标号
"call 标号" 相当...
阅读全文 |
评论次数(5) |
浏览次数(375) |
所属类型(汇编作业)
『 查看更多文章 』