汇编第三次实验内容参考答案3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三作业编程实验
3-1、教材习题3.12
已知从DS:2200H,ES:3200H单元起分别存放20个ASCII的字符。找出这两个字符串中第一个不同字符的位置(段内偏地址),并放入DS:22A0H开始的连续两个字单元中。请设计完成此任务的程序段。
(1)使用通常用的比较指令(CMP)实现;
(2)使用数据串比较指令(CMPSB)实现。
方法1
DATAS SEGMENT
ORG 2200H
TAB DB'0123ASFG69HWDIZXCVBN'
ORG 3200H
MEM DB'0123BASDFGMVCXZQWERI'
ORG 22A0H
RESULT DW?,?;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
LEA SI,TAB
LEA DI,MEM
MOV CX,20
A2:MOV BL,[SI]
CMP BL,[DI]
JZ A1
MOV BX,SI
MOV RESULT,BX
MOV BX,DI
MOV RESULT+2,BX
JMP DONE
A1:INC SI
INC DI
LOOP A2
;此处输入代码段代码
DONE: MOV AH,4CH
INT 21H
CODES ENDS
END START
方法2
DATAS SEGMENT
ORG 2200H
TAB DB'0123ASFG69HWDIZXCVBN'
ORG 3200H
MEM DB'0123BASDFGMVCXZQWERI'
ORG 22A0H
RESULT DW?,?;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
LEA SI,TAB
LEA DI,MEM
MOV CX,20
A2:CMPSB
;MOV BL,[SI]
;CMP BL,[DI]
JZ A1
DEC DI
DEC SI
MOV BX,SI
MOV RESULT,BX
MOV BX,DI
MOV RESULT+2,BX
JMP DONE
A1:LOOP A2
;此处输入代码段代码
DONE: MOV AH,4CH
INT 21H
CODES ENDS
END START
3-2、教材习题3.21
编写程序段,在数据区0000H:2000H开始100字节范围内,查找字符'A',若找到,则将偏移地址送入DX,没有找到,则结束。DATAS SEGMENT
ORG 2000H
STRING DB'1A34567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuioplkjh'
DB'1234567890QWERTYUIOPKSDFGHJKLZXCVBNMqwertyuioplkjh'
CNT EQU $-STRING
;ORG 3500H
RESULT DW?;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
LEA DI,STRING
MOV CX, CNT
MOV AL,'A'
A1: SCASB
JZ A2
DEC CX
JNZ A1
JMP DONE
A2: DEC DI
MOV RESULT,DI
DONE: MOV AH,4CH
INT 21H
CODES ENDS
END START
3-3、教材习题3.33
编程实现求S=(X2+Y2 )/Z的值,并将结果放入RESULT单元。
DATAS SEGMENT
X DB 5
Y DB 4
Z DB 3
RESULT DB?;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AL,X
MOV CL,2
MUL AL
MOV BX,AX
MOV AL,Y
MUL AL
ADD AX,BX
MOV BL,Z
DIV BL
MOV RESULT,AL;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START
3-4、教材习题3.34
在数据区中,以TABLE开始连续存放0~6的立方值(称为立方表),设任给一数x(0≤x≤6),x在TAB1单元,查表求x的立方值,并把结果存入TAB2单元。
DATAS SEGMENT
TABLE DB 0,1,8,27,64,125,216
TAB1 DB 3
TAB2 DB?;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS