(2011.10.29)汇编_王爽_第08章_学习小结

来源:互联网 发布:免费网络英语 编辑:程序博客网 时间:2024/06/09 23:56
 

(2011.10.29)汇编_王爽_第08章_学习小结

本章主要内容:

1. div除法指令

2. dup指令

3. 寻址方式的综合应用

4. 偏移地址的寄存器的使用:bx, si, di, bp

5. ptr的使用

 

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

 

需注意的知识点:

1. push指令只进行字操作

2. mov word ptr ds:[0], 1  用word ptr指明了指令访问的内存单元是一个字单元。

3. 当在偏移地址中包括bp时, […bp],段地址就默认在ss中,(ss)*16+bp

4. bx,si,di,bp四种寄存器可以单独出现,也可以双个出现,不用多个同时出现,

当两个出现的时候,只能bx与 si或di搭配,bp与si或di搭配,即可以将其分为两组:

组1是 (bx, bp), 组2是(si, di), 同组内的成员不能同时出现,只能异组搭配。

 

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

; 程序名称:实验7_寻址方式在结构化数据访问中的应用.asm; 程序功能:将几个数据段的内容放到一段数据段中,并使用除法计算数值。; 题目如下:编程,将data段中的数据按如下格式写入到table段中,;           并计算21年中的人均收入(取整),结果也按下面的格式保存在table段中。; ____________________________________________________________________________________________; | 行起始地址   | 年份(4字节)  |空| 收入(4字节)  |空| 雇员数(2字节  ) |空 |  人均收入(2字节)|空|; | table:0    |     1975     |格|     16       |格|       3        |格 |       ???        |格|; | table:10H  |     1976     |  |     22       |  |       7        |  |       ???        |  |; | table:20H  |     1977     |  |     382      |  |       9        |  |       ???        |  |; | table:30H  |     1978     |  |     1356     |  |       13       |  |       ???        |  |; | table:40H  |     1979     |  |     2390     |  |       28       |  |       ???        |  |; | table:50H  |     1980     |  |     8000     |  |       38       |  |       ???        |  |;               ..........................................................................                         ;               ..........................................................................                           ; | table:140H |     1995     |  |     5937000  |  |       17800    |  |       ???        |  |; |____________|______________|__|______________|__|________________|__|__________________|__|assume cs:codesg, ds:data, ds:tabledata segment    db '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982', '1983', '1984', '1985'    db '1986', '1987', '1988', '1989', '1990', '1991', '1992', '1993', '1994', '1995'    ; 以上表示21年的21个字符串(年份)(4字节)        dd 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514, 345980    dd 590827, 803530, 1183000, 1843000, 2759000, 3753000, 4649000, 5937000    ; 以上表示21年公司总收入的21个dword型数据(收入)(4字节)        dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635    dw 8226, 11542, 14430, 15257, 17800    ; 以上是表示21年公司雇员人数的21个word型数据data endstable segment    db 21 dup ('year summ ne ?? ')  ; dup指令,用于数据的重复                                    ; db 重复的次数 dup (重复的字节型数据)                                    ; dw 重复的次数 dup (重复的字型数据)                                    ; dd 重复的次数 dup (重复的双字型数据)                                    ; dd:用来定义dword(double word, 双字)table ends codesg segmentstart:    mov ax, data    mov ds, ax                      ; 首先将data数据段放入ds中,用于提取数据时所用的地址        mov ax, table    mov es, ax                      ; 然后将table数据段放入es中,用于放入时所用的地址        mov bx, 0                       ; 将源内存分为两个起点,此为其一    mov si, 168                     ; 将源内存分为两个起点,此为其二    mov di, 0                       ; 目的内存的偏移地址        mov cx, 21                      ; 一共有二十一年,因为设置循环次数为21s:    mov al, ' '                     ; byte ptr 指明了指令访问的内存单元是一个字节单元    mov es:[di].4, al    mov es:[di].9, al    mov es:[di].12, al    mov es:[di].15, al              ; 以上,先将一年中数据为空格的内存单元设为空格        mov ax, ds:[bx].0               ; 将年份放入目的地址    mov es:[di].0, ax     mov ax, ds:[bx+2].0     mov es:[di+2].0, ax        mov ax, ds:[bx].84              ; 将收入放入目的地址    mov es:[di].5, ax    mov ax, ds:[bx+2].84    mov es:[di+2].5, ax           mov ax, ds:[si]                 ; 将雇员数放入目的地址    mov es:[di].10, ax    ;   div除法指令;   div          8位      16位;   被除数       ax       dx*10000H + ax;   除数         [...]     [...];   商           al       ax;   余数         ah       dx    ;   计算人均收入:总收入除以人数    mov dx, es:[di].7    mov ax, es:[di].5                   ; 将被除数放入dx与ax中    div word ptr es:[di].10             ; 进行除法并且设定除数    mov es:[di].13, ax                  ; 结果会被放到ax中,将ax的结果放入目标内存中                                        add di, 16    add si, 2    add bx, 4    loop s        mov ax, 4c00h    int 21h    codesg endsend start            

原创粉丝点击