改:DATA SEGMENT ORG 10H M2 DB ?
DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA MOV DS,AX MOV M2,AL
CODE ENDS END START
MOV SI,10H MOV [SI], AL
MOV DS:[0010H],AL
(3) M3 DW ‘ABCD’
改:M3 DW 'AB','CD' M3 DB 'ABCD'
(4) M4 DB 1234
改:M4 DB '1234' M4 DW 1234
(5) DATA1 SEGMENT DA1 DW 1234H DATA1 ENDS DATA2 SEGMENT DA2 DW 5678H DATA2 ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA1 … MOV BX, DA2 … CODE ENDS
ASSUME CS: CODE, DS: DATA2
ASSUME CS:CODE, DS: DATA1 …
ASSUME DS: NOTHING ASSUME DS: DATA2
ASSUME CD:CODE, DS: DATA1, ES: DATA2 MOV AX, DATA2 MOV ES, AX …
MOV BX,DA2
4-12 按照下面要求写出程序的框架
(1)数据段的位置从8000H开始,数据段中定义一个有100个字节的数组。 (2)堆栈段名为STACK1,留100个字的空间。
(3)代码段指定段寄存器,主程序从1000H开始,给有关段寄存器赋值。
DATA SEGMENT AT 800H M1 DB 100 DUP (?) DATA ENDS
STACK1 SEGMENT STACK DW 100 DUP (?) STACK1 ENDS
CODE SEGMENT AT 100H
ASSUME CS:CODE,DS:DATA, SS: STACK1 START: MOV AX,DATA MOV DS,AX
CODE ENDS END START
4-15 将MBUF为起始单元的5个数按相反次序传到NBUF单元开始的存储单元之中. DATA SEGMENT
MBUF DW 1,2,3,4,5 NBUF DW 5 DUP(?) M EQU 10H DATA ENDS
STACK1 SEGMENT PARA STACK DB 100 DUP(0) STACK1 ENDS CODE SEGMENT
ASSUME CS:CODE, DS:DATA,SS:STACK1 START: MOV AX, DATA MOV DS, AX
MOV SI, OFFSET MBUF MOV DI, OFFSET NBUF MOV CX, 5 ADD SI, 8
LOP: MOV AX, [SI] MOV [DI],AX DEC SI DEC SI INC DI INC DI DEC CX JNZ LOP
MOV AH, 4CH INT 21H CODE ENDS
END START
4-16 试编写程序,完成下列数字表达式的功能
?1(X??1)?Y??0(?1?X?1)??1(X???1) ?解:
DATA SEGMENT
XX DB X Y DB ? DATA ENDS
STACK1 SEGMENT PARA STACK DB 100 DUP(0) STACK1 ENDS CODE SEGMENT
ASSUME CS:CODE, DS:DATA,SS:STACK1 START: MOV AX, DATA MOV DS, AX MOV AL, XX CMP AL, -1 JG BIGR MOV AL, -1
JMP JUST2 BIGR: CMP AL, 1 JGE JUST1 MOV AL, 0 JMP JUST2 JUST1: MOV AL, 1 JUST2: MOV Y, AL MOV AH, 4CH INT 21H CODE ENDS
END START
4-17 将内存中某数据块中的正数和负数分开,并分别将这些正数和负数送同一数据段的两
个缓冲区中,并在屏幕上显示正数和负数的个数. DATA SEGMENT
D1 DB -1, -2, 1, 2, 3, -4, 4,5,-5,0,0,9,-3 COUNT EQU $-D1
D2 DB 100 DUP(?) D3 DB 100 DUP(?) PNUM DW 1 DUP(?) NNUM DW 1 DUP(?)
CONST DW 10000,1000,100,10,1 DECS DB 5 DUP(0)
HEAD1 DB 'THE NUMBER OF POSITIVE NUMBER IS:$' HEAD2 DB 'THE NUMBER OF NEGATIVE NUMBER IS:$' DATA ENDS
STACK1 SEGMENT PARA STACK DB 100 DUP(0) STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA,SS:STACK1 START: MOV AX, DATA MOV DS, AX
MOV BX, OFFSET D1 MOV SI, OFFSET D2 MOV DI, OFFSET D3 MOV CX, COUNT LOP: MOV AL, [BX] CMP AL, 0 JGE JUST1 MOV [DI], AL INC DI
INC NNUM JMP JUST2 JUST1: JE JUST2 MOV [SI], AL INC SI INC PNUM JUST2: INC BX DEC CX JNZ LOP
MOV AH,9H
MOV DX,OFFSET HEAD1 INT 21H
MOV AX,PNUM
MOV DL,0AH MOV AH,02H INT 21H
MOV DL,0DH MOV AH,02H INT 21H
MOV AH,9H
MOV DX,OFFSET HEAD2 INT 21H
MOV AX,NNUM CALL DISPLAY
MOV DL,0AH MOV AH,02H INT 21H
MOV DL,0DH MOV AH,02H INT 21H
MOV AH, 4CH INT 21H
DISPLAY PROC NEAR MOV CX,5 LEA SI,CONST LEA DI,DECS