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

来源:互联网 发布:斗鱼抢鱼丸软件 编辑:程序博客网 时间:2024/06/07 02:59
 

(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 endsend 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, 0987hdata ends ; 开始定义栈段stack segment    dw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 stack ends ; 开始定义代码段code segmentstart:                  ; 设置代码开始执行的入口地址     ; 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, 8s:    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, 8a ends b segment    db 1, 2, 3, 4, 5, 6, 7, 8b ends c segment    db 0, 0, 0, 0, 0, 0, 0, 0c ends code segmentstart:     mov bx, 0        mov cx, 8s:      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 21hcode endsend start 

原创粉丝点击