(2011.10.28)汇编_王爽_第六章_学习小结

 

(2011.10.28)汇编_王爽_第六章_学习小结

本章主要内容:

1. 学会如何定义程序入口;

2. 知道如何定义多个段;

3. 知道如何运用所定义的多个段。

 

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

 

; 程序名称:603_start_指明程序入口.asm

; 程序功能:将指定区域的数据放入栈并将数据按逆序存放到某区域中

 

assume cs:codesg

         ; 用dw定义16个字型数据,在程序加载后,将取得16个字的内存空间,存放这16个数据。

         ; 在后面的程序中将这段空间当作栈来使用

codesg segment

         dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h

         dw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 

         ; dw即“define word“,每个dw数据占了16个字节的空间.

 

start:

         mov ax, cs

         mov ss, ax

         mov sp, 30h     ; 将设置栈顶ss:sp指向cs:30h[注意:这里是十六进制]

 

         mov bx, 0

         mov cx, 8

 

s:                                  ; 利用栈,可以将程序中定义的数据逆序存放,在这里,先将全部数据入栈

         push cs:[bx]

         add bx, 2

         loop s

         

         mov bx, 0

         mov cx, 8

 

s0:

         pop cs:[bx]

         add bx, 2

         loop s0               ; 以上依次出栈8个字型数据代码段0~15单元中

 

         mov ax, 4c00h

         int 21h

 

codesg ends

end start                    ; 指明程序的入口在start处[即将start:那里的地址设为cs:ip的地址]

                                     ; (end后加标号代表入口地址,标号可任意取,此时标号为start)


 

 

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

 

; 程序名称:604_定义不同的段.asm

; 程序功能: 定义多个段,并将数据按逆序存放到某区域中 

;       附: 一个段有8个字节,连续定义的段,连续存储

assume cs:code, ds:data, ss:stack

 

; 开始定义数据段

data segment

    dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h

data ends

 

; 开始定义栈段

stack segment

    dw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 

stack ends

 

; 开始定义代码段

code segment

start:                  ; 设置代码开始执行的入口地址

 

    ; ss:sp 栈段

    mov ax, stack       ; 将stack段的段地址送入ax中

    mov ss, ax                                     

    mov sp, 20h         ; 设置栈顶ss:sp指向stack:20

    

    mov ax, data

    mov ds, ax          ; ds指向data段

    

    mov bx, 0           ; ds:bx指向data段中的第一个单元

    

    mov cx, 8

s:

    push [bx]

    add bx, 2

    loop s              ; 以上将data段中的0~15单元中的8个字型数据依次入栈

    

    mov bx, 0

    

    mov cx, 8 

s0:

    pop [bx]

    add bx, 2

    loop s0             ; 以上依次出栈8个字型数据到data段的0~15单元中

    

    mov ax, 4c00h       ; 程序返回

    int 21h 

code ends

 

end start


   

 

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

 

; 程序名称:实验5_习题5_不同段中数据相加.asm

; 程序功能:将a段和b段中的数据依次相加,将结果存入到c段中

; 程序分析:

 

assume cs:code, ds:a, ds:b, ds:c

 

a segment

    db 1, 2, 3, 4, 5, 6, 7, 8

a ends

 

b segment

    db 1, 2, 3, 4, 5, 6, 7, 8

b ends

 

c segment

    db 0, 0, 0, 0, 0, 0, 0, 0

c ends

 

code segment

start: 

    mov bx, 0

    

    mov cx, 8

s:  

    mov ax, 0             ; 将a段的第bx个数据放入al中

    mov dx, a

    mov es, dx

    mov al, es:[bx]       ; 将b段的第bx个数据与al相加

    mov dx, b

    mov es, dx

    add al, es:[bx]

    mov dx, c             ; 将相加结果放入c段中

    mov es, dx

    mov es:[bx], al

    add bx, 2             ; 地址递增,开始循环

    loop s

           

    mov ax, 4c00h

    int 21h

code ends

end start

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值