6.汇编语言显示、指令

本文介绍了8086汇编语言中显示的原理,包括显存与屏幕显示的关系,以及代码直接定址表的使用。接着详细阐述了外部设备的控制,并对8086CPU的指令系统进行了总结,涵盖数据传送、算术运算、逻辑、转移、处理机控制和串处理等指令类别,帮助读者深入理解汇编语言的基础操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:显示的原理

1.在屏幕中显示的内容来自显存中的数据
在这里插入图片描述
2.低位后8个高位前8个
在这里插入图片描述
3.在屏幕中显示
在这里插入图片描述

二:代码直接定址表

assume cs:code
code segment
         a : db 1,2,3,4,5,6,7,8  ;在后面加有“:”的地址标号,只能在代码段中使用,不能在其他段中使用。
         b : dw 0
start :mov si,offset a
         mov bx,offset b
         mov cx,8
    s : mov al,cs:[si]
         mov ah,0
         add cs:[bx],ax
         inc si
         loop s
         mov ax,4c00h
         int 21h
code ends
end start

程序中,code、a、b、start、s都是标号。这些标号仅仅表示了内存单元的地址描述了单位长度的标号

assume cs:code
code segment
          a db 1,2,3,4,5,6,7,8 ;标号a、b后面没有":",因此它们是可以同时描述内存地址和单元长度的标号。
                               ;标号a,描述了地址code:0,和从这个地址开始,以后的内存单元都是字节单元
          b dw 0               ;标号b描述了地址code:8,和从这个地址开始,以后的内存单元都是字单元。
start :  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

使用数据标号来描述存储数据的单元的地址和长度

assume cs:code,ds:data ;用伪指令assume将标号所在的段和一个段寄存器
联系起来(编译器需要)
data segment          
          a db 1,2,3,4,5,6,7,8
          b dw 0
data ends
code segment
start:  mov ax,data
          mov ds,ax ;真正确定ds寄存器
          mov si,0
          mov cx,8
s:       mov al,a[si] ;编译为:mov al,[si+0] 默认所访问单元的段地址在ds
          mov ah,0
          add b,ax ;编译为:add [8],ax
          inc si
          loop s
          mov ax,4c00h
          int 21h
code ends
end start
data segment
	a db 1,2,3,4,5,6,7,8
	b dw 0
	c dw a, b ;等价于c dw offset a, offset b
	;数据标号c处存储的两个字型数据为标号a、b 的偏移地址
data ends

data segment
	a db 1,2,3,4,5,6,7,8
	b dw 0
	c dd a,b ;等价于c dw offset a, seg a, offset b, seg b
	;数据标号c处存储的两个双字型数据为标号a的偏移地址和段地址、标号b 的偏移地址和段地址
data ends

seg操作符,功能为取得某一标号的段地址
建立一张表,表中依次存储字符“0”~“F”,我们可以通过数值0 ~ 15直接查找到对应的字符

assume cs:code

code segment
start:  
		mov al,0eh

        call showbyte

        mov ax,4c00h
        int 21h

;子程序:
;用al传送要显示的数据

showbyte:
        jmp short show

        table db '0123456789ABCDEF'	;字符表

show:   push bx
        push es

        mov ah,al
        shr ah,1           
        shr ah,1
        shr ah,1
        shr ah,1			    ;右移4位,ah中得到高4位的值
        and al,00001111b		;al中为低4位的值

        mov bl,ah
        mov bh,0
        mov ah,table[bx]		;用高4位的值作为相对于table的偏移,取得对应的字符

        mov bx,0b800h
        mov es,bx
        mov es:[160*12+40*2],ah

        mov bl,al
        mov bh,0
        mov al,table[bx]		;用低4位的值作为相对于table的偏移,取得对应的字符
        
        mov es:[160*12+40*2+2],al

        pop es
        pop bx
        ret

code ends
end start

在这里插入图片描述

三:外部设备与如何被控制

在这里插入图片描述

四:指令总结

8086CPU提供以下几大类指令。
1.数据传送指令
mov、push、pop、pushf、popf、xchg 等都是数据传送指令,这些指令实现寄存器和内存、寄器和寄存器之间的单个数据传送。
2.算术运算指令
add、sub、adc、sbb、inc、dec、cmp、imul、idiv、aaa等都是算术运算指令,这些指令实现存器和内存中的数据的算数运算。它们的执行结果影响标志寄存器的sf、zf、of、cf、pf、af位。
3.逻辑指令
and、or、not、xor、test、shl、shr、sal、sar、rol、ror、rcl、rcr等都是逻辑指令。除了not指外,它们的执行结果都影响标志寄存器的相关标志位。
4.转移指令
可以修改IP,或同时修改CS和IP的指令统称为转移指令。转移指令分为以下几类。
(1)无条件转移指令,比如,jmp;
(2)条件转移指令,比如,jcxz、je、jb、ja、jnb、jna等;
(3)循环指令,比如,loop;
(4)过程,比如,call、ret、retf;
(5)中断,比如,int、iret。
5.处理机控制指令
对标志寄存器或其他处理机状态进行设置,cld、std、cli、sti、nop、clc、cmc、stc、hlt、wait、esc、lock等都是处理机控制指令。
6.串处理指令
对内存中的批量数据进行处理,movsb、movsw、cmps、scas、lods、stos等。若要使用这些指令方便地进行批量数据的处理,则需要和rep、repe、repne 等前缀指令配合使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值