8086汇编1:HELLO WORLD

 assume cs:code,ds:data
data segment
   str1 db 'hello world123456789$'
data ends


code segment

start:
   mov ax,data
   mov ds,ax
   
   mov dx,offset str1


   mov ah,09h
   int 21h


   mov ah,4ch
   int 21h


code ends


end


上面的代码,实现HELLO WORLD ,相当于c语言打印printf("hello world123456789");


知识点:

(1)寄存器:CPU有14个16位寄存器,分别是:AX,BX,CX,DX, CS,DS,ES,SS,SI,DI,BP,SP,IP,FLAG.每个16位寄存器又分为高8位以及低8位,比如AX,高8位为AH,低8位为AL.

(2) 汇编分为4个段,分别是代码段、数据段、堆栈段、附加段。本程序只是用了代码段以及数据段。数据段主要用于存放数据,代码段主要编写指令。

(3)代码段:

data segment
   str1 db 'hello world123456789$'
data ends

其中db是指字节,汇编中常用的定义包括db 、 dw  、DD,其中DB为1个字节,DW为字,即2个字节,DD为双字,即4个字节。'hello world123456789$' 表示一个字符串,在汇编中单引号以及双引号都可以用来定义字符串。$为字符串结束符,相当于C语言的'\0'

(4)  声明

assume cs:code,ds:data   声明代码段是哪些段,数据段是哪些段

(5)代码段.

start:  指令的入口地址,相当于C语言的main

   mov ax,data
   mov ds,ax


表示把代码段的段基址放入DS寄存器(注意在8086中寻址是采用段基址*16+偏移地址来寻址的,通过这样扩展,16位能够寻址1M内存)。


 mov dx,offset str1

取数据段字符串的偏移地址,并传输到 DX中

   mov ah,09h
   int 21h

调用DOS中断打印字符,09表示打印字符,DOS会自动从DX读取字符进行打印,直到遇到$停止。

  mov ah,4ch
   int 21h

返回,相当于return ;




你可能感兴趣的:(汇编与反汇编)