计组(day4) 汇编语言 第一次使用EMU8086 总结

目录

    • 第一个程序
      • 伪指令
      • 标号
    • 微机实验3的源程序
      • 对其中出现的汇编指令及伪指令进行总结

第一个程序

实验环境:EMU8086

程序1

assume cs:codesg

codesg segment
    
    mov ax,0123H
    mov bx,0456H
    add ax,bx
    add ax,bx
    
    mov ax,4c00H
    int 21H
    
codesg ends

end

程序说明:

伪指令

在汇编语言程序中,包含两种指令:汇编指令、伪指令
汇编指令是有对应的机器码的指令,可以被翻译为机器指令,最终为CPU所执行。
伪指令没有对应的机器指令,最终不被CPU所执行。伪指令是由编译器来执行的指令,编译器根据伪指令来进行相关的编译工作。

上述程序中包含以下伪指令:

㈠ 第一条伪指令

XXX segment
		.
		.
		.
XXX ends

说明: segment 和 ends 是一对成对使用的伪指令,这是在写可被编译器编译的汇编程序时,必须要用到的一对伪指令。
功能: 定义一个段,segment说明一个段开始,ends说明一个段结束。
格式: 一个段必须有一个名称来标识,使用格式为:

段名   segment
		.
		.
段名   ends			

如上述程序中的:

codesg segment				; 定义一个段,段的名称为“codesg",这个段从此开始
	.
	.
codesg ends					; 名称为"codesg"的段到此结束

段的用途: 段被用来存放代码、数据或当作栈空间来使用。

㈡ 第二条伪指令:end
功能: 一个汇编程序的结束标记,编译器在编译汇编程序的过程中,如果碰到了伪指令end,就结束程序的编译。
用途: 程序写完了,要在结尾处加上伪指令end。

㈢ 第三条伪指令:assume
功能: 假设某一段寄存器和程序中的某一用segment…ends定义的段相关联。
用途: 在程序的开头,用assume将有特定用途的段和相关的段寄存器关联起来。
如上述程序中的:

assume cs:codesg

该语句将用作代码段的段codesg和CPU中的段寄存器cs联系起来。

标号

汇编语言中,除了汇编指令和伪指令外,还有一些标号,比如"codesg"。一个标号指定了一个地址。比如codesg在segment的前面,作为一个段的名称,这个段的名称最终被编译、连接程序一个段的段地址。

微机实验3的源程序

DATA SEGMENT
    
MESSAGE DB 'THIS IS A SAMPLE PROGRAM OF KEYBOARD AND DISPLAY'
        DB  0DH,0AH,'PLEASE STRIKE THE KEY!',0DH,0AH,'$'
        
DATA ENDS

STACK SEGMENT PARA STACK'STACK'
    
    DB  50  DUP(0) 
    
STACK ENDS

CODE SEGMENT
    ASSUME  CS:CODE,DS:DATA,SS:STACK
  
START:  MOV     AX,DATA
        MOV     DS,AX
        MOV     AX,STACK
        MOV     SS,AX
        MOV     DX,OFFSET MESSAGE
        MOV     AH,9
        INT     21H 
        
AGAIN:  MOV     AH,1
        INT     21H
        CMP     AL,1BH
        JE      EXIT
        CMP     AL,61H
        JC      ND
        CMP     AL,7AH
        JA      ND
        AND     AL,11011111B  
        
ND:     MOV     DL,AL
        MOV     AH,2
        INT     21H
        JMP     AGAIN     
        
EXIT:   MOV     AH,4CH
        INT     21H       
        
CODE    ENDS
        END     START

对其中出现的汇编指令及伪指令进行总结

指令 功能
汇编指令 OFFSET 取得其后变量或标号的偏移地址
MOV 通用数据传送指令,传送字或字节
INT 21H 当AH=09H时,显示字符串。
调用参数:DS:DX=串地址 '$'结束字符串
当AH=01H时,键盘输入并回显。
返回参数AL=输入字符
当AH=02H时,显示输出。
调用参数DL="输出字符"
当AH=4CH时,带返回码结束。
调用参数AL=返回码
CMP 比较(结果只是影响6个状态标志位)
JE 等于则跳转
JC 有进位则跳转
JA 高于则跳转
JMP 无条件跳转
AND 按位与
伪指令 SEGMENT...ENDS 定义一个段,segment说明一个段开始,
ends说明一个段结束
DB 定义字节型数据
PARA 段对齐方式为节起始,起始地址以0H
结尾,能被16整除
DUP 用来进行数据重复
ASSUME 假设某一段寄存器和程序中的某一用
segment...ends定义的段相关联
END 结束程序的编译

此段程序中的标号有:

  1. DATA
  2. MESSAGE
  3. STACK
  4. CODE
  5. START
  6. AGAIN
  7. ND
  8. EXIT

ASCII码对照表
其中,出现的ASCII码有

  1. 0DH               ;CR,回车
  2. 0AH               ; LF,换行
  3. 1BH               ; ESC
  4. 61H               ; 字符’a’
  5. 7AH               ; 字符’z’

你可能感兴趣的:(微型计算机原理)