《汇编语言》总结05 ―― 数据处理的两个基本问题
(一)前述 标题所说的两个基本的问题为:
这两个问题,在机器指令中必须给以明确或隐含的说明,否则计算机无法工作。 我们定义的描述性符号:reg和sreg。 reg表示一个寄存器,用sreg表示一个段寄存器。 reg的集合包括:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、di; sreg的集合包括:ds、ss、cs、es。 (二)bx、si、di和bp 在8086CPU中,只有这4个寄存器可以用在“[...]”中来进行内存单元的寻址。下面的指令是正确的: mov ax,[bx] mov ax,[bx+si] mov ax,[bx+di] mov ax,[bp] mov ax,[bp+si] mov ax,[bp+di] 下面的指令是错误的: mov ax,[cx] mov ax,[ax] mov ax,[dx] mov ax,[ds] 在[...]中,这4个寄存器可以单个出现,或只能以4种组合出现:bx和si、bx和di、bp和si、bp和di。 下面的指令是错误的: mov ax,[bx+bp] mov ax,[si+di] 只要在[...]中使用寄存器bp,而指令中没有显性地给出段地址,段地址就默认在ss中,如下: mov ax,[bp+idata] mov ax,[bp+si+idata] (三)机器指令处理的数据在什么地方 处理的数据可以在3个地方:CPU内部、内存、端口。 (四)汇编语言中数据位置的表达 可以用3个概念来表达数据的位置
(五)指令要处理的数据有多长 8086CPU的指令,可以处理两种尺寸的数据,byte和word。所以在机器指令中要指明,指令进行的是字操作还是字节操作。
(六)div指令 div是除法指令,使用这个指令需要注意以下几个问题:
(七)伪指令dd 前面我们用db和dw定义字节型数据和字型数据,dd是用来定义dword(double word)型数据的,比如: data segment ? db 1 ? dw 1 ? dd 1 data ends 在data段中定义了3个数据 第一个数据为01H,在data:0处,占1个字节; 第二个数据为0001H,在data:1处,点1个字; 第三个数据为00000001H,在data:3处,占2个字; (八)dup指令 dup是一个操作符,它是编译器识别处理的符号,用来进行数据的重复,比如: db 3 dup (0) 定义了3个字节,它们的值都是0,相当于db 0,0。 db 3 dup (0,1,2) 定义了9个字节,它们是0、1、2、0、1、2、0、1、2,相当于db 0,2,2。 可见,dup的使用格式如下: db 重复的次数 dup (重复的字节型数据) dw 重复的次数 dup (重复的字型数据) dd 重复的次数 dup (重复的双字型数据) stack segment ? ?dw 0,0 ??dw 0,0 stack ends 相当于如下: stack segment ? db 200 dup (0) stack ends 总结完毕! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |