hao1033 发表于 2011-6-23 09:59:44

汇编语言(紧急)

在王爽老师汇编书中的问题2.1中的 问题

mov ax,001ah
mov bx,0026h
add,al,bl
add ah,bl   这里开始我就很纳闷 十分纳闷他的ax是2640h bx是0026hbx数据没改 ax的2640h怎么算的?
难道26和40结合?
接着的下面 就一窍不懂 前面还好理解 后面不好理解 是怎么算的?
mov ah,0 ax 0040h bx 4026h 这个是什么意思 怎么算出来的?

我是新手 急需高手解答!

Miller01001 发表于 2011-6-23 10:23:05

本帖最后由 Miller01001 于 2011-6-23 10:33 编辑

mov ax,001ah
mov bx,0026h
add,al,bl
add ah,bl   这里开始我就很纳闷 十分纳闷他的ax是2640h bx是0026hbx数据没改 ax的2640h怎么算的?
难道26和40结合?
接着的下面 就一窍不懂 前面还好理解 后面不好理解 是怎么算的?
mov ah,0 ax 0040h bx 4026h 这个是什么意思 怎么算出来的?

你就把AX,BX寄存器当作变量来使用,但是他们有高低位之分
mov ax,001ah

解答,AX = AH, AL
现在AH的高位是00H ,低位是1AH
因为最老的处理器是8位的,而intel兼容了老的处理器、
8086是16位的
所以兼容了8位的处理了,每8位1个字节。AX是16位处理器的寄存器所以分高低
同理mov bx,0026h
BX = BH,BL
BH = 00H ,BL =26H

add,al,bl ; 1a+26 = 40H ;现在AL的低位是1aH
低位加上低位嘛。然后把相加的值传送给AL
因为AX的高位并没有变所以AH还是00.所以AX = 0040H
       ;mov ax,001ah
       ;mov bx,0026h
add ah,bl
因为是AX高位加上BX的低位,把值传送给AX的高位
就是00H + 26H = 26H ;,AH的值是26H,AX=2640H。
因为add,al,bl相加已经把AX的低位的值改变了,所以AX = 2640H
因为是16位的寄存器,所以AX现在的值是26   40H了
                                                                  ↑   ↑
                                                               高位 低位
                                                                AH   AL

hao1033 发表于 2011-6-23 10:35:20

add,al,bl ; 1a+26 = 40H ;现在AL的低位是1aH
低位加上低位嘛。然后把相加的值传送给AL
因为AX的高位并没有变所以AH还是00.所以AX = 0040H
mov ax,001ah
mov bx,0026h
add ah,bl
因为是AH高位加上BX的低位,把值传送给AH
就是00H + 26H = 26H ;现在AX的高位,AH的值是26H,AX=2640H。
因为add,al,bl相加已经把AX的低位改变了,所以AX = 2640H
因为是16位的寄存器,所以AX现在的值是2640H了
不怎么好理解
下面的 add al,85h 0040h 这个怎么算?
也是用你那个方法吗? 那al是低的 低是40 高呢?

Miller01001 发表于 2011-6-23 10:38:40

本帖最后由 Miller01001 于 2011-6-23 10:42 编辑

下面的 add al,85h 0040h 这个怎么算?
也是用你那个方法吗? 那al是低的 低是40 高呢?
add al,85H
就是说把AX的低位的值在加上85H,然后传送给AX的低位AL
AX的高位,是看你对AX的高位做了什么操作他随时可以改变的
用汇编指令去改变寄存器的值啊,如果指令没有对寄存器进行任何操作
他的值是不会改变的。默认全是AX = 0000 ; 因为是16位
页: [1]
查看完整版本: 汇编语言(紧急)