ぃ_夕文 发表于 2011-8-8 14:25:11

关于第27课视频中的那个

本帖最后由 ぃ_夕文 于 2011-8-8 17:55 编辑

关于第27课视频中
重写一次课本中第5.5节 题目是计算FFFF:0~FFFF:B单元中的数据的和,结果存储在DX中
视频中代码如下:
assume cs:code
code segment
    mov ax,0ffffh
        mov ds,ax
        mov bx,0
        mov dx,0
        mov cx,12
       
s:mov al,
    mov ah,0
    add dx,ax
    inc bx
    loop s

    mov ax,4c00h
    int 21h
code ends
end       
就是不明白它为什么要赋予ah=0,,,,,不要它行不行??为什么

这个
mov ah,0   //这ah为什么要赋与0?,,想不明白,,谁懂可以告诉我哈,,谢谢{:5_109:}

zhdw 发表于 2011-8-8 14:38:17

ax 分成 两个8位寄存器ah 存放高位al 存放低位   ah=10h   al=20h   那么ax=1020h   为什么赋予ah=0,要看题目的

parbbo 发表于 2011-8-8 15:48:21

这没有为什么

ぃ_夕文 发表于 2011-8-8 17:53:24

课本中第5.5节 题目是计算FFFF:0~FFFF:B单元中的数据的和,结果存储在DX中
视频中代码如下:
assume cs:code
code segment
    mov ax,0ffffh
        mov ds,ax
        mov bx,0
        mov dx,0
        mov cx,12
       
s:mov al,
    mov ah,0
    add dx,ax
    inc bx
    loop s
   
    mov ax,4c00h
    int 21h
code ends
end       
就是不明白它为什么要赋予ah=0,,,,,不要它行不行??为什么

parbbo 发表于 2011-8-8 18:06:35

al是为了确定后面的是以字节为计算单元的,ax为字型寄存器,且在前面ax被赋予ffff了,你把低两位改为中的值,哪高两位还是ff阿,这样你得清空它才正确!

parbbo 发表于 2011-8-8 18:12:28

所以不能去掉,如果在mov al,之前添加mov ax,0指令,你所说的那行可以去掉

ぃ_夕文 发表于 2011-8-8 20:04:59

s:mov al,
    mov ah,0
    add dx,ax
    inc bx
    loop s

mov al,
mov ah,0

这段代码的意思是不是指向IP的??? 把ax清空就是0000,
物理地址FFFF:0000 是不是这个意思,,

那add dx,ax   //是不是 add 0,0000这个原意?

我还是debug 调试一下

parbbo 发表于 2011-8-8 20:31:11

这不对,你得把寄存器和内存分开!

parbbo 发表于 2011-8-8 20:36:06

ax是16为寄存器,ax可以分为ah、al两个八位(主要用于兼容八位寄存器),mov跟ah或者al是向cpu说明请给我内面插入一个八位数,mov al,就是把偏移到bx处的内存八位值插入al,即ax的低八位,而mov ah,0就是说把ax的高八位清0,你觉得它怎么为0?

ぃ_夕文 发表于 2011-8-8 21:28:57

:(:(好像懂了
add dx,ax   //这个AX是不是FFFF呢?
,,,谢谢parbbo,,,

parbbo 发表于 2011-8-8 21:57:08

好像懂了!!
页: [1]
查看完整版本: 关于第27课视频中的那个