注册 登录
编程论坛 汇编论坛

[求助]这里AX等于多少

hero2007 发布于 2007-10-21 23:47, 880 次点击

oper1 db 1,2
oper2 dw 1234h,5678h
.
.
mov ax,word ptr[oper1 + 1]
mov al,byte ptr[oper2]
结果(AX)=



写了个程序输出是3434H,昏了。

DATAS SEGMENT
oper1 db 1,2
oper2 dw 1234h,5678h
DATAS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,word ptr[oper1+1]
mov al,byte ptr[oper2]

MOV BH,AH
MOV BL,AL

AND AH,0F0H
MOV CL,4
SHR AH,CL
ADD AH,30H
MOV CH,AH
MOV AH,2
MOV DL,CH
INT 21H


AND BH,0FH
ADD BH,30H
MOV AH,2
MOV DL,BH
INT 21H


AND AL,0F0H
MOV CL,4
SHR AL,CL
ADD AL,30H
MOV AH,2
MOV DL,AL
INT 21H

AND BL,0FH
ADD BL,30H
MOV AH,2
MOV DL,BL
INT 21H

MOV AH,2
MOV DL,'H'
INT 21H

MOV AH,4CH
INT 21H

CODES ENDS
END START

如果(AX)真等于3434H,怎么算的?

[此贴子已经被作者于2007-10-21 23:52:38编辑过]

2 回复
#2
hwbnet2007-10-22 10:09
oper1 db 1,2
oper2 dw 1234h,5678h
因为:数据排列顺序是高地址对高位数据,所以以上定义在内存中排列顺序为:01,02,34,12,78,56
所以:mov ax,word ptr[oper1 + 1],ax=3402
mov al,byte ptr[oper2],ax=3434

#3
zklhp2007-10-23 13:24

小尾模式……

1