`

第八章 数据处理的两个基本问题

阅读更多
2014年4月8日 星期二 23时44分34秒

第八章 数据处理的两个基本问题
        (1)计算机处理的数据在什么地方
        (2)要处理的数据有多长

        寄存器(reg):ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si
        段寄存器(sreg):ds,ss,cs,es

8.1 bx,si,di和bp
    (1)在8086CPU中,只有这4个寄存器可以用在"[...]"中来进行内存单元的寻址
               例如:
                        mov ax,[bx]
                        mov ax,[bx+si]
                        mov ax,[bx+di]
                        mov ax,[bp]
                        mov ax,[bp+si]
                        mov ax,[bp+di]
                       
    (2)在[...]中,这4个寄存器可以单个出现,或只能以4中组合出现:bx和si,bx和di,bp和si,bp和di
               例如:
                        mov ax,[bx]
                        mov ax,[si]
                        mov ax,[di]
                        mov ax,[bp]
                        mov ax,[bx]
                        mov ax,[bx+si]
                        mov ax,[bx+di]
                        mov ax,[bp+si]
                        mov ax,[bp+di]
                        mov ax,[bx+si+idata]
                        mov ax,[bx+di+idata]
                        mov ax,[bp+si+idata]
                        mov ax,[bp+di+idata]

                下面的指令是错误的:
                        mov ax,[bx+bp]               
                        mov ax,[si+di]       
    (3)只要在[...]中使用寄存器bp,而指令中没有显式的给出段地址,段地址默认在ss中。 例如:
                mov ax,[bp]             含义:(ax)=((ss) * 16 + (bp))
                mov ax,[bp+idata]       含义:(ax)=((ss) * 16 + (bp) + idata)
                mov ax,[bp+si]          含义:(ax)=((ss) * 16 + (bp) + (si))
                mov ax,[bp+si+idata]    含义:(ax)=((ss) * 16 + (bp) + (si) + idata)

8.2 机器指令处理的数据在什么地方
        绝大部分机器指令都是进行数据处理的指令。大致可以分为3类:读取,写入,运算
        数据可以存在3个地方:CPU内部,内存,端口
       
8.3 汇编语言中数据位置的表达
        汇编中用3个概念来表达数据的位置:
        (1)立即数(idata)
                对于直接包含在机器指令中的数据(执行前在CPU的指令缓冲器中),在汇编语言中称为立即数(idata),即在汇编指令中直接给出
                例:        mov ax, 1
                            mov ax, 'a'
        (2)寄存器
                指令要处理的数据在寄存器中,在汇编指令中给出相应的寄存器名。
                例:        mov ax,bx
                            mov ds,ax

        (3)段地址(SA)和偏移地址(EA)
                例:        mov ax,[0]
                            mov ax,[bx+si]

8.4 寻址方式
        定位内存单元的方法我们称之为寻址方式。
       
8.5 指令要处理的数据有多长
        (1)8086CPU的指令,可以处理两种尺寸的数据,即byte和word。即字节和字。

        (2)在没有寄存器名存在的情况下用操作符X ptr指明内存单元的长度。X在汇编中可以为word或byte
               例如:下面的指令中,用word ptr指明了指令访问的内存单元是一个字单元
                mov word ptr ds:[0],1
                inc word ptr [bx]
                add word ptr [bx],2

              例如:下面的指令中,用btye ptr指明了指令访问的内存单元是一个字节单元
                mov byte ptr ds:[0],1   

              在没有寄存器参与的内存单元访问指令中,用word ptr 或byte ptr显性的指明要访问的内存单元的长度是很有必要的。

         (3) 其他方法   
             有些指令默认访问的是字单元或字节单元。
             例如:push [1000H]就不能指明访问的是字单元还是字节单元,因为push指令只进行字操作

8.6 寻址方式的综合应用
                                       ;寻址方式的综合应用
assume cs:code
code segment
start:mov ax,seg
        mov ds,ax
        mov bx,60h
       
        mov word ptr [bx+och],38
        add word ptr [bx+oeh],70
       
        mov si,0
        mov word byte [bx+si+10h],'V'
        inc si
        mov word byte [bx+si+10h],'A'
        inc si
        mov word byte [bx+si+10h],'X'
code ends
end start

8.7 div指令
        div是除法指令,使用div做除法时应注意以下几个问题:
        (1)除数:有8位和16位,在一个reg或内存单元中
        (2)被除数:默认放在AX或DX和AX中,如果除数为8位,被除数则为16位,默认在AX中存放;
                                         如果除数为16为,被除数则为32为,在DX(高16位)和AX(低16位)中存放
        (3)结果:如果除数是8位,则AL存储除法操作的商,AH存储除法操作的余数
                 如果除数是16位,则AX存储除法操作的商,DX存储除法操作的余数
       
        格式如下:
                div reg
                div 内存单元
               
                div byte ptr ds:[0]
           含义:(al) = (ax) / ((ds)* 16 + 0)的商
                 (ah) = (ax) / ((ds)* 16 + 0) 的余数

                div word ptr es:[0]
           含义:(ax) = [(dx) * 10000H + (ax) ] / ( (es) * 16 + 0  ) 的商
                 (dx) = [(dx) * 10000H + (ax) ] / ( (es) * 16 + 0  ) 的余数

                                        ;计算100001/100的值
;100001转换为16进制为186A1H. 因为100001大于2的16次方(65536),所以被除数采用32位的计数器进行计算。高位存在dx,低位存在ax中
;100(64H)小于2的8次方,所以采用8位的寄存器就可以,但是被除数是32位,所以这边必须采用16的寄存器。
;则ax存放商,dx存放余数

assume cs:code
code segment
start:
        mov dx,1
        mov ax,86A1h
        mov bx,100
        div bx

        mov ax,4c00h
        int 21h
code ends
end start
               ----------------------------------------
                             ;编程,利用除法指令计算1001/100
;1001(3E9H)小于2的16次方大于2的8次方,故被除数采用16位的寄存器。(默认在AX中)
;100小于2的8次方,故除数采用8位寄存器
;AL为商,AH为余数
;结果 AX=010A
assume cs:code
code segment
start:
        mov ax,1001
        mov bl,100
        div bl
       
        mov ax,4c00h
        int 21h
code ends
end start
                    
              问题:问什么有时候要将被除数转换为16进制,有时候又不需要呢?

8.8 伪指令dd 
        dd: define double word 定义双字型数据
       
                                ;问题8.1
;用div计算data段中第一个数据除以第二个数据的结果,商存在第三个数据的存储单元中

assume cs:code,ds:data
data segment
        dd 100001
        dw 100
        dw 0
data ends

code segment
start:
        mov ax,data
        mov ds,ax
        mov ax,ds:[0]     ;低16位存储在ax中
        mov dx,ds:[2]     ;高16位存储在dx中
        div word ptr ds:[4]
        mov ds:[6],ax     ;将商存在ax:[6]中
       
        mov ax,4c00h
        int 21h
code ends
end start

8.9 dup
        dup是一个操作符,在汇编汇中同db,dw,dd等一样,也是由编译器识别的符号。 它和db,dw,dd等伪指令配合使用,用来进行数据的重复。
       
        db 3 dup (0,1,2) 即定义了9个字节,他们是0,1,2,0,1,2,0,1,2

        db  重复的次数 dup (重复的字节型数据)
        dw  重复的次数 dup (重复的字型数据)
        dd  重复的次数 dup (重复的双节型数据)
       
                                        ;定义容量为100个字节的栈
;用dup

stack segment
        dd 200 dup (0)
stack ends
       

实验七 寻址方式在结构化数据访问中的应用
          
;编程,将data段中的数据按如下格式写入到table段中,并计算21年中人均收入。

assume cs:code, ds:data
data segment
        db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
        db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
        db '1993','1994','1995'
        ;以上是表示21年的字符串
       
        dd 16,22,382,1356,2390,8000,16000,24486,50065,97497,140417,1977514
        dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
        ;以上是表示21年公司总收入的21个dword型数据
       
        dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
        dw 11542,14430,15257,17800
        ;以上是表示21年公司雇员人数的21个word型数据
       
data ends

table segment
        db 21 dup ('year summ ne ?? ')
table ends

code segment
        start:
                mov ax,data
                mov ds,ax
                mov cx,21
                mov si,0
                mov di,0
                mov ax,table
                mov es,ax
               
        s: 
                mov ax,ds:[si]       ;年份转送
                mov es:[di],ax
                mov ax,ds:[si+2]
                mov es:[di+2],ax

                mov ax,ds:[84+si]    ;收入传送
                mov es:[5+di],ax
                mov dx,ds:[84+si+2]
                mov es:[7+di],dx
               
                push cx
               
                mov cx,ds:[84+84+bx]  ;雇员数传送
                mov es:[10+di],cx
               
                ;计算人均收入
                div cx
               
                pop cx
                mov es:[0Dh+di],ax
               
                add si,4
                add bx,2
                add di,16
               

            loop s
               
                mov ax,4c00h
                int 21h
code ends
end start












       
                                                                       2014-4-13 01:47 记 @sanlihe.xichengqu.beijing
1
0
分享到:
评论

相关推荐

    数据结构(C语言版) 第八章 排序 知识梳理 + 习题详解1

    本文将深入讲解C语言版《数据结构》第八章中涉及的排序算法,包括归并排序、交换排序(快速排序和冒泡排序)、插入排序、选择排序以及它们之间的比较。 一、归并排序 归并排序是一种分治策略的体现,它将大问题分解...

    试验设计与数据处理第五章正交试验设计正规版资料.ppt

    试验设计与数据处理第五章正交试验设计正规版资料.ppt ...本资源提供了关于试验设计与数据处理的第五章正交试验设计的正规版资料,涵盖了正交表的基本概念、类型和应用,以及水平试验和分批试验的概念和例子。

    ArcGIS空间分析实验数据 第8章数据 汤国安

    总的来说,这份《ArcGIS空间分析实验数据 第8章数据 汤国安》是GIS学习者宝贵的实践资料,它提供了丰富的案例和数据,帮助学习者掌握空间分析的基本技巧和高级应用,为解决实际地理问题打下坚实基础。通过实验,你...

    计算机网络第8版第三章数据链路层习题答案.pdf

    数据链路层是计算机网络中的一个重要层次,负责在两个相邻节点间建立和维护数据链路,确保数据的可靠传输。本章主要讨论了数据链路层的一些关键概念和功能。 首先,数据链路与链路之间的区别在于,数据链路不仅包含...

    第八章用SQL语句操作数据.zip

    JOIN用于合并来自两个或更多表的数据。主要有INNER JOIN(只返回匹配的行)、LEFT JOIN(返回左表的所有行,即使右表没有匹配)、RIGHT JOIN(返回右表的所有行,即使左表没有匹配)和FULL OUTER JOIN(返回两表的...

    第八章 环境数据处理软件应用.pptx

    【环境数据处理软件应用】是本章的核心主题,主要涵盖了环境数据分析、环境评价以及环境保护管理三个方面。在环境数据分析部分,讲解了如何利用软件进行标准曲线计算。以【例8.1】为例,通过启动计算程序,输入标准...

    计算机网络第八章课后答案

    本资源总结了计算机网络第八章课后答案,涵盖了计算机网络安全相关的重要知识点。下面是详细的知识点解释: 1. 机密性、完整性和认证:机密性是指发送方和预定的接收方能够理解传输的报文内容,而窃听者不能解密所...

    python数据分析第九章资料

    Python数据分析在现代科技领域扮演着至关重要的角色,...以上是Python数据分析第九章可能涵盖的主要知识点,通过学习这些内容,你可以提升数据处理和分析的能力,为后续的机器学习或其他数据驱动的决策提供坚实的基础。

    SPSS教程 第一部分 数据处理

    本教程的第一部分将重点介绍数据处理的基础知识,包括数据的导入、管理、清洗以及基本的统计分析。 1. **数据导入**: SPSS支持多种数据格式的导入,如CSV、Excel、DBF等。在“文件”菜单中选择“打开”或“导入...

    Hadoop大数据处理技术基础与实践(第2版)(微课版)PPT-课件.rar

    《Hadoop大数据处理技术基础与实践(第2版)(微课版)PPT-课件》是一个关于Hadoop在大数据处理领域的核心课程资源。这个压缩包包含了丰富的教学资料,帮助学习者深入理解和掌握Hadoop生态系统的核心概念和技术。...

    8概率论与数理统计(茆诗松)第二版课后第八章习题参考答案1

    《概率论与数理统计》(茆诗松第二版)中的第八章主要探讨了方差分析与回归分析,这是统计学中用于分析数据的重要方法。本章分为两大部分,前部分涉及方差分析,后部分关注回归分析。 方差分析(Analysis of ...

    第11章_数据处理之增删改1

    总结起来,本章主要涉及了MySQL数据库中的数据处理操作,包括创建数据库、定义表结构、插入数据、更新数据和删除数据等核心技能。这些都是数据库管理员和开发人员日常工作中不可或缺的部分,熟练掌握这些操作能够...

    冈萨雷斯数字图像处理第三版第9章原始图像

    这两个步骤共同决定了图像的质量和数据量。 3. 图像格式:原始图像可能以多种文件格式存在,如BMP、TIFF、JPEG等。每种格式有其特定的压缩算法和存储特性,对图像质量和文件大小有直接影响。 4. 图像的基本属性:...

    数字信号处理-基于计算机的方法(第四版)答案--8章(3).pdf

    例如,在第8章的3部分中,讨论了通过Z变换和滤波器设计来实现信号处理系统。具体地,它通过给出的传递函数H3(z)和G3(z)来展示如何用计算机方法实现信号处理。 在文档中,提到了两种不同的情况: 情况3涉及一个传递...

    实验设计与数据处理第一章例题及课后习题答案.docx

    实验设计与数据处理第一章例题及课后习题答案.docx 本文档主要介绍实验设计与数据处理的相关知识点,涵盖了实验设计、数据处理、误差计算、检验方法等方面的内容。 一、实验设计 实验设计是指在实验中进行实验...

    测井数据处理与综合解释.pdf

    2. 教材的结构和内容:本书分为十章,前五章主要介绍测井数据处理与解释的基本理论和方法,以地层评价和油气分析为主线。后五章则侧重于近十年来测井解释领域的一些重要研究成果,包括最优化测井解释、水淹层评价、...

    数据结构第八章作业

    数据结构第八章主要涉及到的是二叉排序树和哈希表两个重要的数据结构概念,它们在计算机科学中扮演着至关重要的角色,特别是在数据的组织、存储和检索方面。 首先,二叉排序树(Binary Sort Tree,BST)是一种特殊...

    Java期末复习资料_第2章_基本数据类型与数组.pdf

    逻辑类型只有一个基本数据类型boolean,它用于表示真(true)或假(false)的逻辑值。整数类型包括byte、short、int和long,它们用于表示没有小数部分的数。其中,byte和short类型的变量存储的数据有负数和正数,...

Global site tag (gtag.js) - Google Analytics