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

我的博客

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

[2008-01-06 22:03] 检测点 17.1

“在int 16h中断例程中,一定有设置IF=1的指令。”这种说法对吗?
    我觉得这种说法不正确。
    应用程序在调用int 16h中断例程的时候,在进入中断例程后,IF和TF都已经置0了,从其0号功能子程序的作用来看,它是循环检测键盘缓冲区中是否有数据,如果有,则将其送入ah和al中,并删除缓冲区中已读取的数据。
    而,我们按下了一个键后,为什么int 16h能读取呢?这是因为int 9在起作用!int 9和int 16h是相互配合使用的,所以,先由int 9中断例程将数据写入了键盘缓冲区,int 16h才能发挥作用。
所以,int 16h中不一定设置有IF=1的指令...
阅读全文 | 评论次数(4) | 浏览次数(1491) | 所属类型(汇编作业)

[2008-01-04 11:22] 实验 16

;编写包含多个功能子程序的中断例程
;安装新的int7ch,其功能子程序如下:
;(1)清屏 (2)设置前景色  (3)设置背景色 (4)向上滚动一行
;ah是传递功能号  al是传递颜色值

;安装程序
assume cs:code
code segment
setscreen: jmp short set
table dw sub1,sub2,sub3,sub4
    set:push bx
        cmp ah,3    ;判断功能号是否过大
        ja sret
        mov bl,ah
        mov bh,0
        add bx,bx
        call word ptr tab...
阅读全文 | 评论次数(4) | 浏览次数(1371) | 所属类型(汇编作业)

[2008-01-02 17:12] 检测点 16.2

;补全程序,将a处的8个数据累加,结果存储到b处的字中.

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 ;设置es指向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
c...
阅读全文 | 评论次数(2) | 浏览次数(1284) | 所属类型(汇编作业)

[2008-01-02 17:09] 检测点 16.1

;补全程序,将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 a[10h],ax  ;本来用add b,ax,但编译时老通不过
        adc a[12h],0   ;因为单元长度不一样!所以只好改成
        add si,2       ;这样子了:add a[10h],ax
        loop s         ;不知道还有没有其它办法?

        mov ax...
阅读全文 | 评论次数(2) | 浏览次数(1326) | 所属类型(汇编作业)

[2008-01-01 18:08] 实验 15

;实验15  安装新的int9中断例程
;安装一个新的int9中断例程,功能:在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   ;ds...
阅读全文 | 评论次数(2) | 浏览次数(606) | 所属类型(汇编作业)

[2008-01-01 10:48] 检测点 15.1

(1)
可以精简为:
    pushf
    call dword ptr ds:[0]
两条指令.
原因:既然在进入中断例程后,IF和TF都已经置0,没有必要再进行设置了,那么
     pushf
    pop ax
    and ah,11111100b
    push ax
    popf
这段代码就变成多余的了,将其删掉即可.
(2)
可能出现问题的程序段是:
    mov word ptr es:[9*4],offset int9
    mov es:[9*4+2],cs
为了保证在执行设置int9中断例程的段地址和偏移地址的指令的时...
阅读全文 | 评论次数(2) | 浏览次数(598) | 所属类型(汇编作业)

[2007-12-27 07:55] 实验 14

点击查看原图
;实验14 访问CMOS RAM
;编程:以"年/月/日 时:分:秒"的格式,显示当前的日期,时间

assume cs:code
code segment
   addr:db 9,8,7,4,2,0        ;将要写入70H端口的地址信息
     s1:db 'yy/mm/dd hh:mm:ss';用于读取转换后的存放并显示

  start:mov ax,cs      ;这是从实验13(3)得到启发的
        mov ds,ax
        mov si,offset addr
        mov di,offset s1  
        mov cx,6

      s:call ...
阅读全文 | 评论次数(2) | 浏览次数(734) | 所属类型(汇编作业)

[2007-12-27 07:53] 检测点 14.2

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

assume cs:code
code segment
  start:mov dx,0
        mov cx,5
      s:mov ax,1000  ;要计算的数
        shl ax,1  ;左移一位
        add dx,ax ;累加到dx中
        loop s
        mov ax,dx

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

;ax=1000
;(ax)=(ax)*10
;结果是AX=2710H (10000)....
阅读全文 | 评论次数(2) | 浏览次数(463) | 所属类型(汇编作业)

[2007-12-26 15:59] 检测点 14.1

;(1)编程:读取CMOS RAM的2号单元的内容.
        mov al,2   
        out 70h,al  ;把2写入70H地址端口
        in al,71h   ;从71H数据端口读取2号单元的内容        
                    ;得到当前时间的"分"

;(2)编程:向CMOS RAM的2号单元写入0.
        mov al,2
        out 70h,al  ;先确定接收数据的地址单元
        mov al,0
        out 71h,al  ;从71H数据端口写入0...
阅读全文 | 评论次数(1) | 浏览次数(555) | 所属类型(汇编作业)

[2007-12-26 07:32] 实验 13(3)

点击查看原图
;下面的程序,分别在屏幕的第2,4,6,8行显示四句英文诗,补全程序.

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 better,best.','$'
  s :dw offset s1,offset s2,offset s3,offset s4
  row:db 2,4,6,8

  start:mov ax,cs
        mov ds,...
阅读全文 | 评论次数(3) | 浏览次数(588) | 所属类型(汇编作业)
页码数(6):  1  2  3  4  5  6