文章

汇编学习笔记——第一个汇编程序

汇编学习笔记——第一个汇编程序

一、汇编代码结构概述

汇编程序通常由多个段组成,主要包括数据段、栈段和代码段。以下是本程序的结构:

  1. 数据段 (DATA SEGMENT):用于定义和存储程序中使用的数据。
  2. 栈段 (STACK SEGMENT):用于存储临时数据和函数调用的返回地址。
  3. 代码段 (CODE SEGMENT):包含程序的执行指令。

第一个汇编程序

DATA SEGMENT
	BUF1 DB 'Hello! How are you!'
	COUNT EQU $-BUF1
	BUF2 DB 20 DUP(?)
DATA ENDS
STACK1 SEGMENT STACK
	DB 20 DUP(?)
STACK1 ENDS
CODE SEGMENT
	ASSUME DS:DATA, SS:STACK1, CS:CODE
START:MOV AX,DATA
	MOV DS,AX
	
	MOV SI,OFFSET BUF1
	MOV DI,OFFSET BUF2
	MOV CX,COUNT

L1: MOV AL,[SI]
	MOV [DI],AL
	INC SI
	INC DI
	LOOP L1

EXIT:MOV AH,4CH
	INT 21H
CODE ENDS
	END START

二、各段内容详解

1. 数据段 (DATA SEGMENT)

DATA SEGMENT
    BUF1 DB 'Hello! How are you!'
    COUNT EQU $-BUF1
    BUF2 DB 20 DUP(?)
DATA ENDS
  • BUF1: 定义了一个字符串,内容为 “Hello! How are you!”。
  • COUNT: 计算 BUF1 的长度。$ 表示当前地址,$-BUF1 计算 BUF1 的字节数。
  • BUF2: 分配了 20 字节的空间,用于存储复制后的字符串,初始值为未定义。

2. 栈段 (STACK SEGMENT)

STACK1 SEGMENT STACK
    DB 20 DUP(?)
STACK1 ENDS
  • 定义了一个栈段,分配了 20 字节的空间,初始值为未定义。栈用于存储临时数据和函数调用时的返回地址。

3. 代码段 (CODE SEGMENT)

CODE SEGMENT
    ASSUME DS:DATA, SS:STACK1, CS:CODE
START:
    MOV AX, DATA
    MOV DS, AX
    
    MOV SI, OFFSET BUF1
    MOV DI, OFFSET BUF2
    MOV CX, COUNT

L1: MOV AL, [SI]
    MOV [DI], AL
    INC SI
    INC DI
    LOOP L1

EXIT: MOV AH, 4CH
    INT 21H
CODE ENDS
END START
  • ASSUME: 指定段寄存器与段的关联,DS 指向数据段,SS 指向栈段,CS 指向代码段。
  • START: 程序入口点。
  • MOV AX, DATA: 将数据段的地址加载到 AX 寄存器。
  • MOV DS, AX: 将 AX 的值赋给数据段寄存器 DS,设置数据段。
  • MOV SI, OFFSET BUF1: 将 BUF1 的地址加载到源索引寄存器 SI。
  • MOV DI, OFFSET BUF2: 将 BUF2 的地址加载到目标索引寄存器 DI。
  • MOV CX, COUNT: 将 BUF1 的长度(字节数)加载到计数寄存器 CX。

复制字符的循环结构

L1: MOV AL, [SI]
    MOV [DI], AL
    INC SI
    INC DI
    LOOP L1
  • L1: 标签,表示循环开始的位置。
  • MOV AL, [SI]: 从 BUF1 中读取一个字节到 AL 寄存器。
  • MOV [DI], AL: 将 AL 中的字节写入 BUF2。
  • INC SI: 源索引寄存器 SI 加 1,指向下一个字节。
  • INC DI: 目标索引寄存器 DI 加 1,指向 BUF2 的下一个位置。
  • LOOP L1: 将 CX 寄存器减 1,如果 CX 不为 0,则跳转回 L1,继续复制下一个字节。

程序退出

EXIT: MOV AH, 4CH
      INT 21H
  • MOV AH, 4CH: 设置 AH 寄存器为 4C,表示程序正常退出。
  • INT 21H: 调用 DOS 中断,执行退出操作。

三、总结

本程序实现了将字符串从 BUF1 复制到 BUF2 的功能,通过对寄存器的使用和循环控制,展示了汇编语言中基本的内存管理和数据操作。理解这些基本概念对于学习更复杂的汇编程序至关重要。

本文由作者按照 CC BY 4.0 进行授权