汇编学习笔记(一) -- Hello World!

汇编学习笔记(一): Hello World!

记:

  1. 刚刚开始学习汇编,作下笔记,怕日后忘记
  2. int 21h等为dos功能调用 功能号的作用可百度int 21h
  3. 功能号是放在ah中的,返回的值等 请百度
data  segment     ; 定义数据段
	string   db 'Hello World!','$'      
	; db(define byte)用来定义一段内存数据 字节为单位 是伪指令
data  ends

code segment      ; 定义代码段
	assume   cs:code, ds:data    ; 将段与寄存器关联
								 ; 具体意思不详
	start: 
		mov  ax, data            ; 拿到数据段的段地址
		mov  ds, ax              ; 将段地址赋给ds段寄存器
		lea  dx, string          ; 拿到string在数据段中            
		                         ; 的偏移量
		mov  ah, 09h             ; 功能号 09h在屏幕输出
		                         ; 以'$'结尾的字符串
		INT  21h                 ; dos功能调用 
		mov  ah, 4ch             ; 功能号 4ch  返回到dos
		INT  21h                 ; dos功能调用
code ends
	end start                    ; 汇编编译程序遇到end就
	                             ; 不往下编译了
  1. int 21h的dos功能调用 显示字符串时 以ds:dx作为字符串的起始地址,以’$'作为结束

  2. db 就相当于声明一下后面的内容依次放到一块连续的内存中 偏移量就是db前面的标示符

  3. 在 db中还可以用dup来声明一块内存 eg: 10 dup(0) 意思是定义一块10个字节的内存 并用0来初始化 如果(?)则说明不初始化

  4. 代码中的 string是个变量 但是对编译器来说它就是个地址, 如果直接用mov ax, string的话 那拿到的是sting这个地址处的内容(ax的话则拿到两个字节的内容, eax的话则拿到四个字节的内容, al或ah的话则拿到1个字节的内容), 想拿到string这个变量的本身的值(即地址)则需要用mov ax, offset string 或者 lea ax, string来获取

  5. eg:
    data segment
    string1 db ‘string1$’

    string2 db ‘string2$’
    data ends

assume ds:data
编译器编译后 string1 即为 DS:0000
string2 即为 DS:0008 (因为 'string1$'是8个字节)
所以此时用 mov ax, string1 则是到 DS:0000处取2个字节的值

  • 仅作笔记之用 有何错误和不妥 希望您不吝赐教
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值