1、00EAH 我们可以看到不同段的段地址,在不同的偏移地址下,可以对应相同的物理地址,也就相同的存储空间。说明在分配段时是重叠的.2.4 每个段区最大可占用64KB的地址范围,因为寄存器都是16位的,216B=64KB。不允许重叠,则最多可分16个段区,因为8086CPU有20条地址线,寻址范围1MB,1MB/64KB=16个。2.6指令目的操作数寻址方式源操作数寻址方式 MOV ARRAY, BX直接寻址寄存器寻址ADC CX, ALPHABXSI带位移的基址变址寻址AND GAMMADI,11011000B带位移的变址寻址立即数寻址INC BL隐含寻址TEST ES:SI, DX寄存器间接寻
2、址SBB SI, BP1源操作数是立即数寻址,AX=1200H2源操作数是寄存器寻址,AX=BX=0100H3源操作数是直接寻址,将2000H10H+1200H=21200H和21201H的内容取出,赋给AX=4C2AH4源操作数是寄存器间接寻址,将2000H10H+0100H=20100H和20101H的内容取出,赋给AX=3412H5源操作数是寄存器相对寻址,将2000H10H+0100H+1100H=21200H和21201H的内容取出,赋给AX=4C2AH6源操作数是基址变址寻址,将2000H10H+0100H+0002H=201002和201003H的内容取出,赋给AX=7856H7
3、源操作数是基址变址相对寻址, 将2000H10H+0100H+0002H+1100H=21202H和21203H的的内容取出,赋给AX=65B7HMOV AX, 00ABH跟随在指令后,有cs:ip决定MOV AX,BX在寄存器中MOV AX,100H2000H10H+100H=20100HMOV AX,BX10H+0100H=20100HMOV AX,BP1500H10H+0010H=15010HMOV AX,BX+10注意是十进制 带位移的基址寻址10H+0100H+0AH=2010AHMOV AX,BXSI基址变址寻址10H+0100H+00A0H=201A0HMOV AX,VAL10H
4、+0050H=20050HMOV AX,ES:BX2100H10H+0100H=21100HMOV AX,SI10H+00A0=200A0HMOV AX,VALBX10H+0100H+0050H=20150HMOV AX,VALBXSI10H+0100H+00A0H+0050H=201F0H2.9指令 Sp 值PUSH CX1FFAH66H1FFBH55HPUSH BX1FFCH44H1FFDH33HPUSH AX1FFEH22H1FFFH11Hsp POP AXAX=5566HBX=3344HPOP CXCX=3344HSP=1FFEH2.10AX 的值MOV AX,0AX=0000HDEC
5、 AXAX=0FFFFHADD AX,7FFFHAX=7FFEHADD AX,2AX=8000HNOT AXAX=7FFFHSUB AX,0FFFFHADD AX,8000HOR AX,0BFDFHAX=0BFDFHAND AX,0EBEDHAX=0ABCDHXCHG AH,ALAX=0CDABHSAL AX,1AX=9B56H (CF=1)RCL AX,1AX=36ADH (AF=1)0110 0010 1010 0000B+ 1001 1101 0110 0000B1 0000 0000 0000 0000B (0000H) AF=0,SF=0,ZF=1,CF=1,OF=0,PF=1 01
6、10 0010 1010 0000B+ 0100 0011 0010 0001B 1010 0101 1100 0001B (0A5C1H) AF=0,SF=1,ZF=0,CF=0,OF=1,PF=0 0001 0010 0011 0100B 0100 1010 1110 0000B 1011 0101 0010 0000B补码形式 1100 0111 0101 0100B0C754H AF=0 SF=1 ZF=0 CF=1 OF=0 PF=0 1001 0000 1001 0000B 0100 1010 1110 0000B 1011 0101 0010 0000B补码形式 0100 010
7、1 1011 0000B (45B0H) AF=0 SF=0 ZF=0 CF=0 OF=1 PF=1 1BX=009AH2BX=0061H3BX=00FBH4BX=001CH5BX=0000H6BX=00E3H (本条语句只对标志位有影响,不存贮结果)BX=0110 1101 0001 0110=6D16HBX=0000 0000 1101 1010=00DAH1DX=0000 0000 1011 1001 DX= 0000 0000 0101 1100=005CH2DX=0000 0000 1011 1001 DX= 0000 0000 0001 0111=0017H3DX=0000 000
8、0 1011 1001 DX= 0000 0101 1100 1000=05C8H4DL= 1011 1001 DX=0000 0000 0111 0010=0072H5DX=0000 0000 1011 1001 DX=0010 0000 0001 0111=2017H6DL= 1011 1001 DX= 0000 0000 1100 1101=00CDH7DH=0000 0000 DX=0000 0000 1011 1001=00B9H8DX=0000 0000 1011 1001 DX=0000 0101 1100 1100=05CCH CF=09DL= 1011 1001 DL=000
9、0 0000 1101 1100=00DCH CF=1方法一: 循环移位 方法二:逻辑右移MOV CL,04H MOV CL,04HROL AL,CL SHR AL,CL第三章宏汇编语言程序设计3.1 1AX=0001H;2AX=0002H3CX=0014H4DX=0028H5CX=0001H1 ARRAY DB 56H,78,0B3H,1002 DATA DW 2965H,45H,2965,0A6H3 ALPHA DW 0C656H,1278H4 BETA DB 2 DUP23,5 DUPA,10 DUP1,2,20 DUP?5STRING DB THIS IS A EXAMPE6COUNT
10、 EQU 10000H01H?42H41H43H1DH1FH (1) (2) BYTE_VARR4CH7657H03HDATA_SEG SEGMENTDATA1 DB DATA SEG,MENTDATA2 DB 72,65,-10DATA3 DB 109,98,21,40DATA4 DB 10 DUP(0)DATA5 DB 12345DATA6 DW 7,9,298,1967DATA7 DW 785,13475DATA8 DW DB ($-DATA6)-(DATA6-DATA1)DATA_SEG ENDS1 MOV BX, OFFSET BUF12) MOV CL BYTE PTR BUF2+
11、23) MOV BUF3+9, A6H4) COUNT EQU BUF3-BUF1APPAY DB 10 DUP (29H)ALPHA DB -25,4,10,76,3BUFFER DB 100 DUP(?)BCD1 DB ?,?BCD2 DB ?CODE SEGMENT ASSUME CS:CODE, DS:DATA_SEG,ES:DATA_SEGSTART: MOV AX,DATA_SEGMOV DS,AXMOV DS, AXMOV CL, 04HMOV SI, OFFSET BCD1MOV AL, SISAL AL,CLMOV BL,SI+1AND BL,0FHADD AL,BLMOV
12、BCD2,ALMOV AH,4CHINT 21HCODE ENDSEND START 1) MOV CH, 32H CH=32H 2) ADD CH, 2AH CH=5CH 3) SHL CH, 1 CH=0B8H 4) MOV BXNUM+9,CH CH=0B8HX DB ?Y DB ?W DB ?Z DB ?R DB ? MOV AX, DATA_SEGMOV AL, WSUB AL, XCBW IDIV 0AHMOV R, AHIMUL YIMUL AXMOV AH, 4CHSTR1 DB THIS IS A DOGSTR2 DB THIS IS A COCKCOUNT DB $-STR
13、2NUM DB ? CODE, DS: MOV AX, DATA_SEGMOV DS, AXMOV ES, AXMOV CH,0MOV CL, COUNTCLDMOV SI,OFFSET STR1MOV DI,OFFSET STR2REPZ CMPSBAND SI,000FHMOV AX,SIMOV NUM, AL3.16 DATA SEGMENT SRCBUF DB 80 DUP? DSTBUF DB 80 DUP? DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS:DATA START: MOV AX,DATA MOV DS, AX MOV SI, OF
14、FSET SRCBUF MOV DI, OFFSET DSTBUF MOV CX, 80 LOP1: MOV AL,SI INC SI CMP AL,ODH JE NEXT MOV DI,AL INC DI NEXT:LOOP LOP1 MOV AH,4CH INT 21H CODE ENDS END START3.17 DATA SEGMENT BUF DB n DUP (? SUM DB O CODE SEGMENT START: MOV AX, DATA MOV DS, AX MOV CX, n MOV SI, OFFSET BUF LOP1: MOV AL, SI CMP AL,O J
15、GE NEXT INC SUM NEXT: LOOP LOP1 MOV AH, 4CH3.18 DATA SEGMENT BUF DW n DUP(? BUF1 DW n DUP(? BUF2 DW n DUP(?DATA ENDS MOV DI, OFFSET BUF1 MOV BX, OFFSET BUF2 MOV AX, SI INC SI CMP AX, 0000H JGE NEXT1 MOV BX, AX ADD BX, 02H JMP LOP2 NEXT1: MOV DI, AX ADD DI, 2 LOP2:STACK SEGMENT STACK DB 256 DUP?STACK
16、 ENDSBUF DB This is a string,$DATA ENDSCODE SEGMENT ASSUME CS:CODE. DS:DATA; SS:STACK MOV SI,OFFSET BUF TACKCHAR: MOV DL,SI CMP DL,$ JZ DONE CMP DL,a JB NEXT SUB DL,20H MOV AH,02H MP TAKECHAR DONE: MOV AH,4CH INT 21H320 DATA_SEG SEGMENT DATX DB ? DATY DB ? DATZ DB ? MOV DS,AXMOV AL,DATXMOV BL,DATY C
17、MP AL,BL JS NEXT MOV DATZ,AL JMP DONENEXT: MOV DATZ,BLDONE: MOV AH,4CH INT 21H DATA DB ? DATB DB ? DATC DB ? DATD DB ? CMP DATA,0 JZ NEXT CMP DATB,0 JZ NEXT CMP DATC,0 MOV AL,DATA ADD AL,DATB ADC AL,DATC MOV DATD,AL JMP DONE MOV DATA,0MOV DATB,0 MOV DATC,03.22 程序段是将十六进制数的ASSII码转化为十六进制数.本例是将大写字母A的ASC
18、II变为十六进制数,将结果存入字符变量HEXNUM中。HEXNUM变量中原来的内容未知,程序段执行后的内容是字符A的十六进制数0A N=10DATA1 DB N DUP(?) DATA2 DB N DUP(? ADR1 DW ? ADR2 DW ? DATA_SEG ENDSLEA SI, DATA1LEA DI,DATA2MOV CX, NLOP1: MOV AH,SICMP AH,DI JNZ NOTEQUINC SIINC DIMOV AH,0FFHSAHFJMP DONENOTEQU: MOV AH,0MOV ADR1,SIMOV ADR2,DICOUNT=100BUF DB COUN
19、T NUP(?MAX DB ?MOV SI, OFFSET BUFMOV CX,COUNT MOV AH,1MOV SI, ALLOOP LOP1MOV SI,OFFSET BUFLOP2:CMP AL, SI+1JA NEXT2XCHG AL,SI+1NEXT2:LOOP LOP2MOV MAX,AL BUF DB 10 DUP(?STR1 DB Do you want input number(y/n)?,0DH,0AH,$STR2 DB Please input the numbers ,0DH,0AH,$ MAX DB ? MIN DB ?MOV DX,OFFSET STR1MOV AH,09HMOV DX,OFFSET STR2MOV CX,10MOV AH,1MOV CX,9LOP3: CMP AL, SI+1JB NEXT3NEXT3:LOOP LOP3MOV MIN,ALMOV AH,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1