最近到外地工作,没能及时做完课程设计2,
前几天刚写完,在软驱上调试通过,
程序内还有需要优化的地方,以后再改。
assume cs:code
code segment
kstart:mov ax,cs ;读取磁盘上第2扇区数据到内存
mov es,ax
mov bx,7e00h
mov al,1
mov ch,0
mov cl,2
mov dl,0
mov dh,0
mov ah,2
int 13h
...


- [游客] good 08/06 22:47
- [游客] 向您请教一个问题:许多资料上都说引导扇区要求将7DEF设成0xAA55,可是你的程序里我却没有找到将 08/06 20:19
- [ghrd] 这是1个int7ch中断例程的安装程序,主程序段只测试了一下最后一个子功能,向上滚动一行。 其他功 08/06 11:05
- [游客] ④该段实际占有空间是Y(16的倍数), Y=(N/16+1)*16 [说明:N/16只取整数部分即 07/31 23:52
- [游客] cmd下运行程序,什么都没显示就到下一行命令了。再输入还是一样,为什么? 07/21 00:03
- [dongxf] 对,还是真家伙好,听着软驱吱嘎嘎的声音,过瘾 用虚拟机,如果虚拟机有问题,那就搞糊涂了 07/12 10:19
- [tomato] 在命令提示符下编译运行程序就可以按相应的键执行相应子程序,看相应的子程序的执行结果。 07/11 10:42
- [tomato] 对! 07/11 10:19
- [tomato] 博主的方法很好! 07/11 10:15
- [tomato] 正确! 07/11 10:13
[2008-08-06 12:02] 第17章 课程设计2
阅读全文 |
评论次数(2) |
浏览次数(945) |
所属类型(汇编作业)
[2008-07-10 18:24] 第17章 实验17
1、找一个还可以用的软驱,一张完好的软盘还真不容易。
有位高手说可以用虚拟PC,和虚拟软驱,
可我总觉得还是真家伙好,听着软驱吱嘎嘎的声音,过瘾。
2、还要注意从软盘读取得内容放在内存的位置,
每读一个扇区就要找大过512字节的内存空间。
我是放在0b800,这样还可以在显示器上验证是否正确。
assume cs:code
code segment
start:mov ax,cs
mov ds,ax
mov si,offset rwda
mov ax,0
mov es,ax
...
有位高手说可以用虚拟PC,和虚拟软驱,
可我总觉得还是真家伙好,听着软驱吱嘎嘎的声音,过瘾。
2、还要注意从软盘读取得内容放在内存的位置,
每读一个扇区就要找大过512字节的内存空间。
我是放在0b800,这样还可以在显示器上验证是否正确。
assume cs:code
code segment
start:mov ax,cs
mov ds,ax
mov si,offset rwda
mov ax,0
mov es,ax
...
阅读全文 |
评论次数(2) |
浏览次数(937) |
所属类型(汇编作业)
[2008-07-07 09:49] BAT批处理文件语法(转)
扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件。
==== 注 =======================================
.bat是dos下的批处理文件
.cmd是nt内核命令行环境的另一种批处理文件
从更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。所以从某个程度分析,batch, unix shell, awk, basic, perl 等脚本语言都...
==== 注 =======================================
.bat是dos下的批处理文件
.cmd是nt内核命令行环境的另一种批处理文件
从更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。所以从某个程度分析,batch, unix shell, awk, basic, perl 等脚本语言都...
阅读全文 |
评论次数(1) |
浏览次数(1661) |
所属类型(学习相关)
[2008-07-05 09:50] 第17章 检测点17.1
(1)
答:对。
int 16h中断例程执行如下:
1、检测键盘缓冲区中是否有数据;
2、没有则继续做第1步;
3、读取缓冲区第一个字单元中的键盘输入;
4、将读取的扫描码送入ah,asc码送入al;
5、将已读取的键盘输入从缓冲区中删除。
在第1、2步可以看出,缓冲区内没有数据的时候,
int 16h会始终等待数据到来,
这时,IF必须是1,int 9h才可能被cpu响应
否则int 16h不能再执行下去。...
答:对。
int 16h中断例程执行如下:
1、检测键盘缓冲区中是否有数据;
2、没有则继续做第1步;
3、读取缓冲区第一个字单元中的键盘输入;
4、将读取的扫描码送入ah,asc码送入al;
5、将已读取的键盘输入从缓冲区中删除。
在第1、2步可以看出,缓冲区内没有数据的时候,
int 16h会始终等待数据到来,
这时,IF必须是1,int 9h才可能被cpu响应
否则int 16h不能再执行下去。...
阅读全文 |
评论次数(1) |
浏览次数(855) |
所属类型(汇编作业)
[2008-07-04 22:31]
第16章 实验16
这个程序是编写int 7ch中断例程
程序在编译的时候,table,sub1,sub2,sub3,sub4都已经确定
而在中断例程复制到0000:0200后,ip要改变为0200h
table,sub1,sub2,sub3,sub4会发生错位
因此,我将中断例程放在程序开头,主程序放在后面,
并且0000:0200 改为0200:0000
这样,中断例程复制到0200:0000后
table,sub1,sub2,sub3,sub4不会发生错位
如果不这样做的话,
就需要计算中断例程与code的偏移,
还要考虑0000:0200 中 200h的偏移
assume...
程序在编译的时候,table,sub1,sub2,sub3,sub4都已经确定
而在中断例程复制到0000:0200后,ip要改变为0200h
table,sub1,sub2,sub3,sub4会发生错位
因此,我将中断例程放在程序开头,主程序放在后面,
并且0000:0200 改为0200:0000
这样,中断例程复制到0200:0000后
table,sub1,sub2,sub3,sub4不会发生错位
如果不这样做的话,
就需要计算中断例程与code的偏移,
还要考虑0000:0200 中 200h的偏移
assume...
阅读全文 |
评论次数(5) |
浏览次数(1399) |
所属类型(汇编作业)
[2008-07-04 16:58] 第16章 检测点16.2
补全程序
assume cs:code,es:data
data segment
a db 1,2,3,4,5,6,7,8
b dw 0
data ends
code segment
start:mov ax,data
mov es,ax
mov si,0
mov cx,8
s: mov al,a[si]
mov ah,0
add b,ax
inc si
loop s
mov ax,4c00h
int 21h
code e...
assume cs:code,es:data
data segment
a db 1,2,3,4,5,6,7,8
b dw 0
data ends
code segment
start:mov ax,data
mov es,ax
mov si,0
mov cx,8
s: mov al,a[si]
mov ah,0
add b,ax
inc si
loop s
mov ax,4c00h
int 21h
code e...
阅读全文 |
评论次数(1) |
浏览次数(763) |
所属类型(汇编作业)
[2008-07-04 16:42] 第16章 检测点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 b,ax
adc b[2],0
add si,2
loop s
mov ax,4c00h
int 21h
code ends
end start...
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 b,ax
adc b[2],0
add si,2
loop s
mov ax,4c00h
int 21h
code ends
end start...
阅读全文 |
评论次数(2) |
浏览次数(810) |
所属类型(汇编作业)
[2008-07-04 15:55] 第15章 实验15
assume cs:code
stack segment
db 128 dup (0) ;栈
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,128 ;定义栈
push cs
pop ds ;(ds)=(cs)
mov ax,0
mov es,ax ;es指向int9中断例程存放段
mov si,offset int9
mov di...
stack segment
db 128 dup (0) ;栈
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,128 ;定义栈
push cs
pop ds ;(ds)=(cs)
mov ax,0
mov es,ax ;es指向int9中断例程存放段
mov si,offset int9
mov di...
阅读全文 |
评论次数(1) |
浏览次数(636) |
所属类型(汇编作业)
[2008-07-04 13:54] 第15章 检测点15.1
(1)
可以精简为
push f
call dword ptr ds:[0]
因为,在int 9中断例程执行前,
硬件系统已经完成了3步工作
1、键盘产生扫描码
2、扫描码送入60h端口
3、引发9号中断
在第3步就要修改IF=0,TF=0
(2)
程序中有2处要增加cli,sti
第一处 在设置新的int 9中断入口地址
cli
mov word ptr es:[9*4],offset int 9
mov es:[9*4+2],cs
sti
第二处 在恢复原int 9中断入口地址
cli
push ds:[0]
pop es:[9*4]
...
可以精简为
push f
call dword ptr ds:[0]
因为,在int 9中断例程执行前,
硬件系统已经完成了3步工作
1、键盘产生扫描码
2、扫描码送入60h端口
3、引发9号中断
在第3步就要修改IF=0,TF=0
(2)
程序中有2处要增加cli,sti
第一处 在设置新的int 9中断入口地址
cli
mov word ptr es:[9*4],offset int 9
mov es:[9*4+2],cs
sti
第二处 在恢复原int 9中断入口地址
cli
push ds:[0]
pop es:[9*4]
...
阅读全文 |
评论次数(1) |
浏览次数(904) |
所属类型(汇编作业)
[2008-07-04 11:20] 第14章 实验14
assume cs:code
stack segment
db 32 dup (0) ;栈
stack ends
code segment
s1:db '00/00/00 00:00:00','$' ;定义显示格式
s2:db 9,8,7,4,2,0 ;存放要读取的端口
start:mov ax,stack
mov ss,ax
mov sp,32 ;初始化栈
mov ax,cs
mov ds,ax
mov bx,offset s1 ;...
stack segment
db 32 dup (0) ;栈
stack ends
code segment
s1:db '00/00/00 00:00:00','$' ;定义显示格式
s2:db 9,8,7,4,2,0 ;存放要读取的端口
start:mov ax,stack
mov ss,ax
mov sp,32 ;初始化栈
mov ax,cs
mov ds,ax
mov bx,offset s1 ;...
阅读全文 |
评论次数(1) |
浏览次数(959) |
所属类型(汇编作业)
『 查看更多文章 』