TITLE EXAMPLE PROGRAMDATA SEGMENT VARX DW 15H VARY DW 10H VARZ DW ?DATA ENDSSTACK1 SEGMENT PARA STACK DW 20H DUP(0)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATA MOV DS,AX MOV AX,VARX SHL AX,1 ADD AX,VARX ADD AX,VARY SUB AX,5 SAR AX,1 MOV VARZ,AX MOV AH,4CH INT 21HCODE ENDS END START
引用第2楼hhbhhb于2007-10-30 20:09发表的 :就说说我的理解好了。。……首先这是个伪指令,就说明它是在汇编过程中起作用的。。事实上我们也确实必须手工设置段寄存器。。所以ASSUME的作用应该是设置某个符号所默认的段寄存器……比如后面使用VARX,就会默认用DS,这样。前面的程序中注释掉也可以用是因为所有的数据都在DATA里,你又把DATA段装入了DS,而汇编默认使用的段寄存器就是DS,所以正常…….......
STACK1 SEGMENT PARA STACK DW 20H DUP(0)STACK1 ENDSCODE SEGMENT VARX DW 15H VARY DW 10H VARZ DW ? ;ASSUME CS:CODE,DS:CODE,SS:STACK1START: MOV AX,CODE MOV DS,AX MOV AX,VARX SHL AX,1 ADD AX,VARX ADD AX,VARY SUB AX,5 SAR AX,1 MOV VARZ,AX MOV AH,4CH INT 21HCODE ENDS END START
TITLE EXAMPLE PROGRAMDATA SEGMENTDATA ENDSSTACK1 SEGMENT PARA STACK DW 20H DUP(0)STACK1 ENDSCODE SEGMENT VARX DW 15H VARY DW 10H VARZ DW ? ASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,CODE MOV DS,AX MOV AX,VARX SHL AX,1 ADD AX,VARX ADD AX,VARY SUB AX,5 SAR AX,1 MOV VARZ,AX MOV AH,4CH INT 21HCODE ENDS END START
TITLE EXAMPLE PROGRAMDATA SEGMENT VARX DW 15H VARY DW 10H VARZ DW ?DATA ENDSSTACK1 SEGMENT PARA STACK DW 20H DUP(0)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE,ES:CODE,SS:STACK1START: MOV AX,DATA MOV DS,AX MOV AX,VARX SHL AX,1 ADD AX,VARX ADD AX,VARY SUB AX,5 SAR AX,1 MOV VARZ,AX MOV AH,4CH INT 21HCODE ENDS END START
TITLE EXAMPLE PROGRAMDATA SEGMENT VARX DW 15H VARY DW 10H VARZ DW ?DATA ENDSSTACK1 SEGMENT PARA STACK DW 20H DUP(0)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE,ES:DATA,SS:STACK1START: MOV AX,DATA MOV DS,AX MOV AX,VARX SHL AX,1 ADD AX,VARX ADD AX,VARY SUB AX,5 SAR AX,1 MOV VARZ,AX MOV AH,4CH INT 21HCODE ENDS END START
引用第9楼hhbhhb于2007-10-31 10:02发表的 :[code]TITLE EXAMPLE PROGRAMDATA SEGMENT VARX DW 15H VARY DW 10H.......
引用第12楼hhbhhb于2007-10-31 13:23发表的 :其实关键是MOV的时候用的是哪个段寄存器……我觉得并不是DS被assume到哪。。而是那个段被assume到哪个寄存器……不过既然可以用那我也不知道了……
引用第13楼ity于2007-10-31 22:30发表的 :你什么时候又跑来这边混了............