汇编网首页登录博客注册
sirius的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
文章收藏
友情链接

[2008-05-23 17:38] 实验17

编写包含多个功能子程序的中断例程。
安装一个新的int 7ch中断例程,实现通过逻辑扇区号对软盘进行读写。

1.编程前了解以下各信息:
(1)逻辑扇区编号的取值范围:[0,2879D]
(2)逻辑扇区号与物理扇区号的对应关系:逻辑扇区号=(面号*80+磁道号)*18+扇区号-1
面号=磁头号=int(逻辑扇区号/(1440))
磁道号=int((rem(逻辑扇区号/1440))/18)
扇区号=rem((rem(逻辑扇区号/1440))/18)+1
(3)int 7ch参数说明:
ah寄存器传递功能号:0表示读,1表示写;
bx寄存器传递要读写的扇区的逻辑扇区号;
用...
阅读全文 | 评论次数(3) | 浏览次数(1348) | 所属类型(汇编作业)

[2008-05-19 19:00] 检测点17.1

“在int 16h中断例程中,一定有设置IF=1的指令。”这种说法对吗?

分析一个例子,int 16h中断例程中的0号功能是从键盘缓冲区中读取一个键盘输入,如果键盘缓冲区中是空的,那么会循环等待,直到缓冲区有数据为止,所以我想CPU是不会让这种死循环的情况发生的,它至少可以在int 16h中断例程中响应int 9中断,以便给键盘缓冲区填入数据。在进入int 16h中断例程前IF和TF都置0了,所以在进入int 16h中断例程后,为了能及时响应int 9中断,应该是有指令将IF设置为1来恢复响应可屏蔽中断。...
阅读全文 | 评论次数(2) | 浏览次数(1234) | 所属类型(汇编作业)

[2008-05-19 14:08] 实验16

点击查看原图
编写包含多个功能子程序的中断例程

安装一个新的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]

1.编程思考:
(1)参考教材16.4节中的相关内容,读懂四个子程序的功能,然后编写int 7ch中断例程的安装程序。int 7ch中断例程的编写中,要注意定址表table中的各...
阅读全文 | 评论次数(2) | 浏览次数(1293) | 所属类型(汇编作业)

[2008-05-13 10:34] 16.3节利用直接定址表显示sin(x)值完整程序

利用直接定址表显示sin(x)值完整程序如下:

assume        cs:code

code        segment
start:  mov ax,120;ax赋值范围为[0,30,60,90,120,150,180]
        call showsin
        mov ax,4c00h 
        int 21h 
showsin:jmp short show
ag        dw 0,30,60,90,120,150,180;角度取值范围列表
table   dw ag0,ag30,ag60,ag90,ag120,ag150,ag180
         ;字符串偏移地址表
ag0        db '0',0
a...
阅读全文 | 评论次数(1) | 浏览次数(1260) | 所属类型(汇编作业)

[2008-05-11 22:02] 检测点16.1、16.2

检测点16.1

下面和程序将code段中a处的8个数据累加,结果存储到b处的dword中,补全程序。

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,ax;等同于add word ptr [b],ax
        adc word ptr b+2,0;等同于add word ptr [b+2],ax
        add si,2
        loop s
        mov ax,4c00h
        int 21h
co...
阅读全文 | 评论次数(7) | 浏览次数(1144) | 所属类型(汇编作业)

[2008-05-10 12:29] 实验15

安装一个新的int 9中断例程,功能:在DOS下,按下“A”键后,除非不再松开,如果松开,就显示满屏幕的“A”;其他的键照常处理。

1.实验前的准备工作:
(1)安装vFloppy,使机器启动时能选择进入DOS实模式,因为本程序运行后在DOS保护模式下会看不到预期效果。
(2)仔细分析教材中例题,了解原int 9中断例程入口地址及新编int 9中断例程入口地址的设置及保存。在新编的中断例程中要调用原中断例程以处理其他键产生的中断过程,只是当检测到“A”的断码时才跳转运行满屏显示“A”的语句。
(3)当扫描码为“A”的断码时,显示满屏幕的“A”,“A”的通码为1eh,所以断码=1eh...
阅读全文 | 评论次数(6) | 浏览次数(1432) | 所属类型(汇编作业)

[2008-05-09 14:34] 检测点15.1

1.仔细分析一下int9中断例程,看看是否可以精简一下?

说明:运行call dword ptr ds:[0]指令进入原int 9的中断例程,进入后会将IF和TF置0。调用原int 9中断例程是要对我们所不关心的一些硬件细节进行处理,这些处理连同将IF和TF置0都一起进行了,所以在新编的int 9中断例程中可以省略对IF和TF置0的语句。

对于程序段:
pushf
pushf
pop ax
and ax,11111100b
push ax
popf
call dword ptr ds:[0]

可以精简为:
pushf
call dword ptr ds:[0...
阅读全文 | 评论次数(1) | 浏览次数(499) | 所属类型(汇编作业)

[2008-05-06 14:17] 实验14

点击查看原图
实验14

编程:以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。

程序1:program1.asm

assume        cs:code,ds:data
data    segment
db        9,8,7,4,2,0;CMOS RAM中用于存放
                        年月日时分秒信息的单元号
data        ends
code        segment
start:        mov ax,data
        mov ds,ax
        mov ax,0b800h
        mov es,ax
        mov si,0
        mov di,0
        mov cx,6
print_tim...
阅读全文 | 评论次数(1) | 浏览次数(623) | 所属类型(汇编作业)

[2008-05-05 19:12] 检测点14.2

编程:用加法和移位指令计算(ax)=(ax)*10

assume        cs:code

code        segment
start:        mov ax,2008;支持奥运
        mov bx,ax
        shl bx,1;bx暂存ax左移1位的结果
        mov cl,3
        shl ax,cl;ax值左移3位
        add ax,bx

        mov ax,4c00h
        int 21h
code        ends
end        start

说明:根据提示(ax)*10=(ax)*2+(ax)*8,即是说将ax值左移1位加上ax值左移3位的值就是所要结果。程序中通过bx暂存了左移1位后的值。给ax赋初值有...
阅读全文 | 评论次数(1) | 浏览次数(610) | 所属类型(汇编作业)

[2008-05-05 17:15] 检测点14.1

1.编程:读取CMOS RAM的2号单元内容。
程序如下:
assume        cs:code
code        segment
start:        mov al,2
        out 70h,al
        in al,71h

        mov ax,4c00h
        int 21h
code        ends
end        start

说明:通过教材了解CMOS RAM芯片的特点,该芯片有两个端口,地址分别为70h和71h,CPU通过这两个端口来读写CMOS RAM。其中70h为地址端口,存放要访问的CMOS RAM单元的地址,71h为数据端口,存放从选定的CMOS RAM单元中读取的数据或要写入的数据。
CPU对CM...
阅读全文 | 评论次数(2) | 浏览次数(562) | 所属类型(汇编作业)
页码数(5):  1  2  3  4  5