《汇编语言》第3版(王爽)第16章

文章详细描述了在8086汇编中如何编写包含多个功能子程序的中断例程,如清屏、设置颜色和向上滚动,以及如何安装新的中断处理程序和更新中断向量表。
摘要由CSDN通过智能技术生成

第16章


检测点16.1
下面的程序将code段中a处的8个数据累加,结果存储到b处的双字中,补全程序。

assume cs:code

code segment
	a dw 1,2,3,4,5,6,7,8
	b dd 0
start:mov si,0  ;使用si访问a段数据
      mov cx,8  ;传输8次
    s:mov ax,a[si] ;将a[si]中的数据取出放入ax中
      add word ptr b[0],ax  ;将ax加到b中
      adc word ptr b[2],0   ;加上进位
      add si,2 ;si+2访问下一个数据(字型数据)
      loop s

      mov ax,4c00h
     int 21h

code ends
end start

检测点16.2
下面的程序将data段中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
      mov es,ax ;es指向数据段
      mov si,0  ;使用si访问a段数据
      mov cx,8  ;传输8次
    s:mov al,a[si] ;将a[si]中的数据取出放入al中
      mov ah,0  ;0送入ah
      add b,ax  ;将ax中的数据加到b中(字型数据)
      inc si    ;si+1指向下一个数据
      loop s

      mov ax,4c00h
      int 21h

 code ends
 end start

实验16 编写包含多个功能子程序的中断例程
安装一个新的int 7ch中断例程,为显示输出提供如下功能子程序。
(1).清屏;
(2).设置前景色;
(3).设置背景色;
(4).向上滚动一行;
入口参数说明如下。
(1).用ah寄存器传递功能号:0表示清屏,1表示设置前景色,2表示设置背景色,3表示向上滚动一行;
(2)对于1、2号功能,用al传送颜色值,(al)∈{0,1,2,3,4,5,6,7}。

assume cs:code

code segment
start:;中断处理程序安装
      mov ax,cs
      mov ds,ax ;ds指向当前程序段
      mov si,offset int7ch ;将中断处理程序的偏移地址放入si中
      mov ax,0 
      mov es,ax ;es指向内存单元地址0处
      mov di,200h ;将内存单元偏移地址200h放入di中
      mov cx,offset int7chend-offset int7ch ;获取中断处理程序的长度
      cld  ;设置正方向传输
      rep movsb ;安装中断处理程序

      mov ax,0 
      mov es,ax ;es指向中断向量表
      mov word ptr es:[7ch*4],200h ;将新的中断处理程序入口地址放入中断向量表(偏移地址)
      mov word ptr es:[7ch*4+2],0  ;将新的中断处理程序入口地址放入中断向量表(段地址)
      ;中断测试
      mov ah,1 ;设置前景色
      mov al,4 ;红色
      int 7ch  ;调用中断程序

      mov ax,4c00h
      int 21h

int7ch:cmp ah,0 
       je do1
       cmp ah,1
       je do2
       cmp ah,2
       je do3
       cmp ah,3
       je do4
   do1:call sub1
       jmp sret
   do2:call sub2
       jmp sret
   do3:call sub3
       jmp sret
   do4:call sub4
       jmp sret

     ;清屏
 sub1:push bx ;寄存器内容入栈保存
      push cx
      push es
      mov bx,0b800h 
      mov es,bx ;es指向显存空间
      mov bx,0  ;后面使用es:[bx]访问显存空间
      mov cx,2000 ;一共2000个字符
sub1s:mov byte ptr es:[bx],' ' ;' '写入显存空间
      add bx,2 ;bx+2指向下一个显存空间
      loop sub1s ;转移到sub1s
      pop es ;寄存器内容出栈恢复
      pop cx 
      pop bx
      ret ;子程序返回

     ;设置前景色
 sub2:push bx ;寄存器内容入栈保存
      push cx
      push es
      mov bx,0b800h
      mov es,bx ;es指向显存空间
      mov bx,1  ;1送入bx(指向第一个字符的颜色属性)
      mov cx,2000 ;一共2000个字符
sub2s:and byte ptr es:[bx],11111000b ;清除显存空间字符属性的低3位(前景色)
      or es:[bx],al  ;将al中的颜色属性写入显存空间字符属性
      add bx,2    ;bx+2指向下一个字符属性
      loop sub2s  ;转移到sub2s
      pop es  ;寄存器内容出栈恢复   
      pop cx
      pop bx
      ret ;子程序返回

     ;设置背景色
 sub3:push bx ;寄存器内容入栈保存
      push cx 
      push es
      mov cl,4 ;4送入cl
      shl al,cl ;将al中数据左移4位
      mov bx,0b800h 
      mov es,bx ;es指向显存空间
      mov bx,1  ;1送入bx(指向第一个字符的颜色属性)
      mov cx,2000 ;一共2000个字符
sub3s:and byte ptr es:[bx],10001111b ;清除显存空间字符属性的654位(背景色)
      or es:[bx],al ;将al中的颜色属性写入显存空间字符属性
      add bx,2  ;bx+2指向下一个字符属性
      loop sub3s  ;转移到sub3s
      pop es ;寄存器内容出栈恢复 
      pop cx
      pop bx
      ret ;子程序返回

   ;向上滚动一行
  sub4:push cx  ;寄存器内容入栈保存
       push si
       push di
       push es
       push ds
       mov si,0b800h
       mov es,si ;es指向显存空间
       mov ds,si ;ds指向显存空间
       mov si,160 ;si指向下一行
       mov di,0  ;di指向第一行
       cld ;设置正方向传输
       mov cx,24

 sub4s:push cx ;cx内容入栈保存
       mov cx,160 ;一行160字节
       rep movsb ;传输一行
       pop cx  ;cx内容出栈恢复
       loop sub4s

       mov cx,80 ;80送入cx
       mov si,0  ;0送入si
sub4s1:mov byte ptr [160*24+si],' ' ;' '写入最后一行
       add si,2 ;si+2指向下一个字符
       loop sub4s1 ;转移到sub4s1
       pop ds ;寄存器内容出栈恢复 
       pop es
       pop di
       pop si
       pop cx
       ret ;子程序返回

  sret:iret ;中断返回
int7chend:nop
code ends
end start
  • 11
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《汇编语言 第4 王爽 pdf》是一本经典的计算机教材,主要介绍了汇编语言的基本原理和编程方法。本书内容详实全面,对于学习汇编语言具有很强的实用性和指导性。 首先,本书通过介绍计算机组成原理、指令系统和寻址方式等基础知识,帮助读者全面理解计算机的工作原理。通过此部分的学习,读者可以对计算机的各个组成部分进行了解,为后续的汇编语言编程打下良好基础。 其次,本书详细讲解了汇编语言的基本语法和指令集。通过具体的代码示例和相关练习,读者可以逐步掌握如何进行数据的存储和运算,以及如何使用寻址方式进行数据传递和控制程序流程。同时,本书还介绍了常用的汇编指令和编程技巧,如循环、条件判断、数组和函数等,帮助读者解决实际问题。 此外,本书还特别关注了汇编语言与C语言的关系和应用。通过对比分析,读者可以更好地理解两种语言之间的联系和差异,充分利用汇编语言的优势来进行性能优化和系统开发。 总结来说,《汇编语言 第4 王爽 pdf》是一本经典而实用的教材,对于理解计算机底层原理、提高程序编写能力和进行系统开发都具有重要的意义。无论是计算机科学专业的学生,还是从事相关工作的从业者,都可以通过学习本书来提升自己的技术水平。 ### 回答2: 《汇编语言 第4》是王爽编写的一本经典的汇编语言教材。该教材以通俗易懂的方式,介绍了汇编语言的基本原理和应用技巧。 在这本书中,王爽首先系统地介绍了计算机的基本知识,包括计算机的组成结构、运算器、控制器等。然后,他详细讲解了汇编语言的基本知识,包括汇编语言的特点、汇编指令的格式、汇编程序的编写等。 接着,王爽介绍了汇编语言的程序设计方法和技巧。他通过丰富的例子和详细的讲解,教授了如何使用汇编语言编写各种程序,如输入输出程序、字符串处理程序、数组操作程序等。通过学习这些例子,读者可以逐步掌握汇编语言的应用。 此外,王爽还介绍了8086指令系统和保护模式的编程,并讲解了汇编程序的调试和优化技巧。他通过大量的实例和实践指导,帮助读者深入理解和掌握汇编语言的高级知识和技术。 《汇编语言 第4》的特点是内容全面、深入浅出,适合初学者和有一定汇编语言基础的读者阅读。这本书的另一个优点是配有大量的习题和实践项目,读者可以通过完成这些习题和项目,进一步加深对汇编语言的理解和应用能力。 综上所述,《汇编语言 第4》是一本权威、经典且实用的汇编语言教材,可以帮助读者全面理解汇编语言的原理和应用,并掌握汇编语言的编程技巧和调试优化技巧。对于想要深入了解计算机底层原理和编程的读者来说,阅读这本书是一个很好的选择。 ### 回答3: 《汇编语言 第4》是由王爽撰写的经典教材,该书以汇编语言为主题,全面系统地介绍了汇编语言的基本概念、基本指令和编程技巧。 这本教材共分为13,内容包括了汇编语言的发展历程、基本概念和原理、汇编语言的基本组成和格式。同时,还介绍了常用的寻址方式和常见的指令集,如8086指令集和80386指令集等。此外,书中还详细说明了汇编语言程序的编写和调试方法,并给出了大量的实例和练习题,以帮助学习者掌握汇编语言的编程技巧。 《汇编语言 第4》的特点是理论与实践相结合,既有理论知识的系统介绍,又有大量的实例和练习,可以帮助读者深入理解汇编语言的原理和应用。另外,该书对一些常见的编程错误和调试技巧也进行了详细讲解,有助于读者提高编程的效率和调试的准确性。 本书的优点在于,用简明的语言和通俗的讲解风格,将抽象的概念和复杂的原理以生动的方式呈现给读者,使读者能够轻松理解和掌握汇编语言的知识。同时,书中的例子和练习题也非常实用和有针对性,能够帮助读者熟练掌握汇编语言的编程技巧。 总之,《汇编语言 第4》是一本经典的汇编语言教材,对于想要深入学习和了解汇编语言的读者来说,是一本值得推荐的书籍。无论是初学者还是有一定基础的读者,都可以通过阅读该书来提高自己的汇编语言编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值