近来,看了看以下汇编视频,终于学了第一个汇编程序—hello world,下面分享以下程序的各部分代码和注释,希望大家有所帮助。

程序源码如下:

assume cs:code,ds:data ;定义代码段和数据段框架


data segment  ;数据段
msg db "hello world";定义字符串
data ends


code segment  ;代码段
start: 
    mov ax,data
    mov ds,ax   ;数据段初始化


    mov bx,0b800h ;将b800h地址空间拷贝到es段寄存器中
    mov es,bx         ;b800h/数据不能直接拷贝到es中,用通用寄存器bs转移给es
    mov cx,11         ;将11赋给cs通用寄存器--字符串循环11次
    mov ah,01000010b  ;字符属性红底绿字


    mov si,0
    mov bx,0 ;初始化
      s:mov al,ds:[si]     ;s:loop循环标号
    mov es:[bx],al         ;es,ds 获取第一个字符地址,字符地址=段地址+偏移地址
    mov es:[bx+1],ah    ;字符后面紧接字符属性
    inc si                       ;使ax 每次加1
    add bx,2                  ;每次bx加2
    loop s                      ;循环结束
    
    mov ax,4c00h          ;防止一闪而过
    int 21h 
    
code ends
end start


以下是运行结果:

第一个汇编程序hello world_数据段


感悟:汇编写程序似乎有点难度,首先得知道很多寄存器,然后要知道如何使用寄存器,然后才能开工啊!就拿hello world为例,要把字符挨个拷贝到显存地址空间才能显示字符,因此要使用循环语句;在赋值是不能像平常语言一样直接赋值,很多时候需要把值和数据传给通用寄存器,然后再通过通用寄存器传给其它特定寄存器。