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

我的博客

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

[2008-04-17 17:37] [求助]第16章的一道检测题的选项有疑惑

下列说法中正确的是______。 
 1、 当数据的标号不在代码段时,只要用assume伪指令将数据段和相应的段寄存器连接起来就可以了。  
 2、 数据标号和地址标号唯一的区别就是,数据标号既表示内存单元的地址,还表示内存单元的长度,而地址标号只表示内存单元的地址。  
 3、 直接定址表只可以存储数据的地址,不可以存储程序段的地址。  
 4、 在中断服务程序用到直接定址表时,和不在中断服务程序的使用一样,直接调用即可。  
------------- 
分析: 
1.错。还需要把具体的段地址送到相应的段寄存器中。 
2.错。至少还有一点不同:见书p278页,地址标号只能在...
阅读全文 | 评论次数(2) | 浏览次数(1267) | 所属类型(错题集锦)

[2008-04-17 17:13] 实验17   编写包含多个功能子程序的中断例程

需要说明一下的是:这个实验我没经过测试,因为条件有限(都是在网吧做的)。
估计课程设计2也是无法正常完成了,感觉很遗憾,以后有机会的话,一定补上。
只能给出安装程序代码:
----------------------------------------------------------------------------------------
assume cs:code
stack segment
 db 128 dup (0)
stack ends
code segment
start :                             
        mov ax,s...
阅读全文 | 评论次数(2) | 浏览次数(1205) | 所属类型(汇编作业)

[2008-04-16 14:39] 实验16   编写包含多个功能子程序的中断例程

分析:
采用两种方法:
方法一:查表。
充分体会数据标号作用,为此,调整了安装程序的结构,把需要安装的数据放在前面,感觉这样更容易理解些。
方法二:比较。
用通过比较功能号进行转移的方法,可能很多人不屑于这个方法,但对于这个小实验而言程序结构也很清晰。
(当然如果用这个方法,就失去了在本章做这个实验的意义,放在前面几章也可以做出来的。)

---------------------------------------方法一:查表-----------------------------------
assume cs:code 
code segment
setscree...
阅读全文 | 评论次数(1) | 浏览次数(1393) | 所属类型(汇编作业)

[2008-04-15 16:22] 检测点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 ends 
end start
---------...
阅读全文 | 评论次数(1) | 浏览次数(1176) | 所属类型(汇编作业)

[2008-04-15 16: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 word ptr b[0],ax         ;需要指明长度
adc word ptr b[2],0          ;
add si,2
loop s

mov ax,4c00h
int 21h

c...
阅读全文 | 评论次数(1) | 浏览次数(1188) | 所属类型(汇编作业)

[2008-04-14 15:07] 实验15    安装新的int 9中断例程

点击查看原图
;不加上分析了,和书上的例题差不多的。
;--------------------安装程序代码如下-------------------
assume cs:code
stack segment
db 128 dup (0)
stack ends
code segment
start:
        mov ax,stack
        mov ss,ax
        mov sp,128
;------------------------ds:si指向数据源---------------------------------
        push cs
        pop ds
        mov si,offs...
阅读全文 | 评论次数(1) | 浏览次数(1239) | 所属类型(汇编作业)

[2008-04-14 14:45] 检测点15.1

(1)
可以精简为:
pushf
call dword ptr ds:[0]
简单分析:
在调用新int9中断例程的过程中调用老的int 9中断例程。
在调用新int9中断例程的时候,IF和TF都已经设置为0,所以没有必要再进行设置了。
另外,对于pushf,虽然,在调用新int9的时候也保存了标志寄存器的值,但即使接下来的指令对标志寄存器无影响,pushf也不能省去。因为是用call调用老int 9,而老int 9用iret返回的,如果少了这句,栈操作不平衡,老int 9就无法正常返回到新int9了。
-------------------------------------...
阅读全文 | 评论次数(1) | 浏览次数(1088) | 所属类型(汇编作业)

[2008-04-13 17:27] 实验14  访问CMOS ROM

点击查看原图
简单分析:
在CMOS ROM中存放有:
秒:0   分:2    时:4      日:7    月:8    年:9
看到这个就有点郁闷了,想找点规律一个循环搞定,结果发现没那能力。有6个数据,一个一个处理,又点不甘心。
两难之下,决定分两次处理(总算有一点规律):
先处理年月日,再处理时分秒。
两部分都使用到了子程序:changeBCD
显示部分,本来可以自己处理的,但考虑到以前已经写过几次了,直接调用中断得了。
;---------------------------------代码如下------------------------------------------...
阅读全文 | 评论次数(1) | 浏览次数(1130) | 所属类型(汇编作业)

[2008-04-13 17:16] 检测点14.2

-------------------------代码如下-------------------------------------------------
assume cs:code 
code segment
start:  
        mov ax,10

        shl ax,1
        mov bx,ax

        mov cl,2             ;前面已经左移一次了。
        shl ax,cl

        add ax,bx 

        mov ax,4c00h
        int 21h
code ends
end start
---------------------------跟踪...
阅读全文 | 评论次数(1) | 浏览次数(1059) | 所属类型(汇编作业)

[2008-04-13 17:15] 检测点14.1

(1)
------------------------代码如下--------------------------------------------------
assume cs:code 
code segment
start:
        mov al,2
        out 70h,al
        in al,71h

        mov ax,4c00h
        int 21h
code ends
end start
--------------------------跟踪一下-------------------------------------------------
D:\MASM>de...
阅读全文 | 评论次数(1) | 浏览次数(1051) | 所属类型(汇编作业)
『 查看更多文章 』