安装一个新的int 7ch中断例程,为显示输出提供如下功能子程序。
(1)清屏;
(2)设置前景色;
(3)设置背景色;
(4)向上滚动一行。
入口参数说明:
(1)用ah寄存器传递功能号:0表示清屏,1表示设置前景色,2表示设置背景色,3表示向上滚动一行;
(2)对于2、3号功能,用al传送颜色值,(al)∈{0,1,2,3,4,5,6,7}。
因为之前有看到论坛上的帖子,还参考了一下他人的程序,基本了解写程序的问题所在,因为table中取sub1,sub2,sub3,sub4的值来自原来安装程序,如果直接将这些值放到0:200处,将发生错位!主要是处理标号问题!
...
- [游客] 飘过 06/11 13:31
- [fpamc] 貌似我正在步入你的路线……`(*∩_∩*)′Up!Up! 05/24 07:46
- [782936509] 敢问高手你是什么基础开始学的,我没有基础想学编程可以的吗?很想成为一个编程员,希望多多指教,呵呵 12/24 19:26
- [aten] 上面的程序我忘记设置要写入的扇区数了,……-_-~! 08/07 15:50
- [keyia] 啊,如梦初醒!万分感谢 05/28 01:32
- [aten] 好久没来汇编网了,拿你调试的结果来说吧! F:\dosimg\>debug c0s.exe - 05/26 22:52
- [keyia] keyia:变成游客了 05/22 19:42
- [游客] 向您请教: (8)从上我们可以看出tc.exe把c0s.obj和用户obj文件一同进行连接,生成e 05/22 19:40
- [aten] dw 定义的应该是10个字单元,我写成了8个了!所以答案就成了20H 04/26 22:01
- [aten] 恩,^_^ 04/24 18:36
- [游客] 这个,你的那个安装INT9中断程序的程序有一点错误,以下这个是我改正后的: assume cs:c 10/08 07:28
- [游客] 没想到我想走的路和正在走的路你已经走过一遍了,可以的话请加865650570——凌陶 愿我们在同一 10/07 23:30
- [keyia] 向您请教: (8)从上我们可以看出tc.exe把c0s.obj和用户obj文件一同进行连接,生成 05/22 19:44
[2009-04-12 22:05] 实验16 编写包含多个功能子程序的中断例程
阅读全文 |
评论次数(1) |
浏览次数(806) |
所属类型(汇编作业)
[2009-04-12 18:29] 检测点16.X
检测点16.1
下面的程序将code段中a处的8个数累加,结果存储到了处的双字中,补全程序。
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[0],ax ;不指明长度编译会警告,但b不是已经指明长度了吗为什么在这还可以再次指定长度
adc word ptr b[2],0 ;而且...
下面的程序将code段中a处的8个数累加,结果存储到了处的双字中,补全程序。
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[0],ax ;不指明长度编译会警告,但b不是已经指明长度了吗为什么在这还可以再次指定长度
adc word ptr b[2],0 ;而且...
阅读全文 |
评论次数(1) |
浏览次数(680) |
所属类型(汇编作业)
[2009-04-12 00:01] 实验15 安装新的int 9中断例程
安装一个新的int 9中断例程,功能:在DOS下,按下“A”键后,除非不再松开,如果松开,就显示满屏幕的“A”其他的键照常处理。
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
mov ax,0
mov es,ax
mov si,offset int9
mo...
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
mov ax,0
mov es,ax
mov si,offset int9
mo...
阅读全文 |
评论次数(3) |
浏览次数(643) |
所属类型(汇编作业)
[2009-04-11 23:21] 检测点15.1
(1)因为在进入中断例程后,IF和TF都已经设置0,没有必要再进行设置,对于程序段:
pushf
pushf
pop ax
and ah,11111100b
push ax
popf
call cword ptr ds:[0]
可以精简为:
pushf
call dword ptr ds:[0]
(2)看看原来主程序有什么潜在问题,找到并修改。
将原来的mov word ptr es:[9*4],offset int9
mov es:[9*4+2]
改成:cli ;关闭可屏敝中断
mov word ptr es...
pushf
pushf
pop ax
and ah,11111100b
push ax
popf
call cword ptr ds:[0]
可以精简为:
pushf
call dword ptr ds:[0]
(2)看看原来主程序有什么潜在问题,找到并修改。
将原来的mov word ptr es:[9*4],offset int9
mov es:[9*4+2]
改成:cli ;关闭可屏敝中断
mov word ptr es...
阅读全文 |
评论次数(1) |
浏览次数(589) |
所属类型(汇编作业)
[2009-04-11 10:37] 实验14 访问CMOS RAM
编程,以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。
assume cs:code
code segment
dat: db 9,8,7,4,2,0
;fh: '// ::'
;ot: 'yy/mm/dd hh/mm/ss' 这两种是在论坛上学习到的,觉得很好
start:mov ax,cs
mov ds,ax
mov si,offset dat
mov di,160*12+36*2
mov cx,6
s:push cx
mov al,[si]
out 70h,a...
assume cs:code
code segment
dat: db 9,8,7,4,2,0
;fh: '// ::'
;ot: 'yy/mm/dd hh/mm/ss' 这两种是在论坛上学习到的,觉得很好
start:mov ax,cs
mov ds,ax
mov si,offset dat
mov di,160*12+36*2
mov cx,6
s:push cx
mov al,[si]
out 70h,a...
阅读全文 |
评论次数(2) |
浏览次数(483) |
所属类型(汇编作业)
[2009-04-11 10:35] 检测点14.X
检测点14.1
(1)编程,读取CMOS RAM的2号单元的内容。
mov al,2
out 70h,al ;告诉地址端口要访问的单元号(2)
in al,71h ;从数据端口2号单元读取一个字节到al中
(2)向CMOS RAM的2号单元写入0。
mov al,2
out 70h,al ;告诉地址端口要访问的单元号(2)
mov al,0
out 71h,al ;向2号单元写入0
检测点14.2
编程,用加法和移位指令计算(ax)=(ax)*10.
assume c...
(1)编程,读取CMOS RAM的2号单元的内容。
mov al,2
out 70h,al ;告诉地址端口要访问的单元号(2)
in al,71h ;从数据端口2号单元读取一个字节到al中
(2)向CMOS RAM的2号单元写入0。
mov al,2
out 70h,al ;告诉地址端口要访问的单元号(2)
mov al,0
out 71h,al ;向2号单元写入0
检测点14.2
编程,用加法和移位指令计算(ax)=(ax)*10.
assume c...
阅读全文 |
评论次数(1) |
浏览次数(504) |
所属类型(汇编作业)
[2009-04-10 16:58] 实验13 编写、应用中断例程
(1)编写并安装int 7ch 中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200处。
参数:(dh)=行号,(dl)=,(cl)=,ds:si指向字符串首地址。
以上中断例程安装成功后,对下面的程序进行单步跟踪,尤其注意观察int、iret指令执行前后CS、IP和栈中的状态。
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start:mov dh,10
mov dl,10
mov cl,2
mov...
参数:(dh)=行号,(dl)=,(cl)=,ds:si指向字符串首地址。
以上中断例程安装成功后,对下面的程序进行单步跟踪,尤其注意观察int、iret指令执行前后CS、IP和栈中的状态。
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start:mov dh,10
mov dl,10
mov cl,2
mov...
阅读全文 |
评论次数(1) |
浏览次数(583) |
所属类型(汇编作业)
[2009-04-10 16:56] 检测点13.X
检测点13.1
(1) 在上面的内容中,我们用7ch中断例程实现loop的功能,则上面的7CH中断例程所能进行的最大转移位移是多少?
分析:上面用BX存放转移位移的偏移地址,而BX所能表示的最大值为FFFFH,所以我认为能进行的最大位移由BX决定,为FFFFH。转移位移的范围为-32768-32767,用补码表示。
(2)用7ch中断例程完成jmp near ptr s指令的功能,用bx向中断例程传送转移位移。
7ch中断全程如下:
jp:push bp
mov bp,sp
...
(1) 在上面的内容中,我们用7ch中断例程实现loop的功能,则上面的7CH中断例程所能进行的最大转移位移是多少?
分析:上面用BX存放转移位移的偏移地址,而BX所能表示的最大值为FFFFH,所以我认为能进行的最大位移由BX决定,为FFFFH。转移位移的范围为-32768-32767,用补码表示。
(2)用7ch中断例程完成jmp near ptr s指令的功能,用bx向中断例程传送转移位移。
7ch中断全程如下:
jp:push bp
mov bp,sp
...
阅读全文 |
评论次数(1) |
浏览次数(527) |
所属类型(汇编作业)
[2009-04-08 20:11] 实验12 编写0号中断的处理程序
在debug实验12的程序时,对于rep movsb 在debug中显示为
F3 REPZ
A4 MOSSB
暂时有些不解!但还是基本理解了中断过程,继续学习ing……!
assume cs:code
code segment
start:mov ax,cs
mov ds,ax
mov si,offset do0 ;设置ds:si指向源地址
mov ax,0
mov es,ax
mov di,200h ;设置es:di指向目的地址...
F3 REPZ
A4 MOSSB
暂时有些不解!但还是基本理解了中断过程,继续学习ing……!
assume cs:code
code segment
start:mov ax,cs
mov ds,ax
mov si,offset do0 ;设置ds:si指向源地址
mov ax,0
mov es,ax
mov di,200h ;设置es:di指向目的地址...
阅读全文 |
评论次数(1) |
浏览次数(497) |
所属类型(汇编作业)
[2009-04-07 17:16] 实验11 编写子程序
编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母,描述如下。
名称:letterc
功能:以0结尾的字符串中的小写字母转变成大写字母
参数:ds:si指向字符串首地址
assume cs:codesg
datasg segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
datasg ends
codesg segment
begin:mov ax,datasg
mov ds,ax
mov si,0
call l...
名称:letterc
功能:以0结尾的字符串中的小写字母转变成大写字母
参数:ds:si指向字符串首地址
assume cs:codesg
datasg segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
datasg ends
codesg segment
begin:mov ax,datasg
mov ds,ax
mov si,0
call l...
阅读全文 |
评论次数(1) |
浏览次数(490) |
所属类型(汇编作业)