汇编20题Word文档下载推荐.docx
- 文档编号:20408863
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:20
- 大小:21.95KB
汇编20题Word文档下载推荐.docx
《汇编20题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《汇编20题Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
操作数为(BX)=0100H
(3)直接寻址方式;
PA=20100H
(4)直接寻址方式;
PA=20050H
(5)BX寄存器间接寻址方式;
(6)附加段BX寄存器间接寻址方式;
PA=21100H
(7)BP寄存器间接寻址方式;
PA=15010H
(8)SI寄存器间接寻址方式;
PA=200A0H
(9)BX寄存器相对寻址方式;
PA=20110H
(10)BX寄存器相对寻址方式;
PA=20150H
(11)BX和SI寄存器基址变址寻址方式;
PA=201A0H
(12)BX和SI寄存器相对基址变址寻址方式;
PA=201F0H
3.36假设X和X+2单元的内容为双精度数p,Y和Y+2单元的内容为双精度数q,(X和Y为低位字)试说明下列程序段做什么工作?
MOVDX,X+2;
(DX)=(X+2)=PH
MOVAX,X;
(AX)=(X)=PL
ADDAX,X;
(AX)=(2*X)=2PL
ADCDX,X+2;
(DX)=(2*(X+2))=2PH
CMPDX,Y+2;
2PH-QH
JLL2;
2PH<
QH------>
L2
JGL1;
2PH>
L1
CMPAX,Y;
2PL-QL
JBEL2;
2PL<
=QL----->
L1:
MOVAX,1;
(AX)=1
JMPSHORTEXIT;
EXIT
L2:
MOVAX,2;
(AX)=2
EXIT:
INT20H;
此程序段判断p*2>q,则使(AX)=1后退出;
p*2≤q,则使(AX)=2后退出。
3.37(序程功能3分,注释7分)
要求测试在status中的一个字节,如果第1,3,5位均为1则转移到routine_1,有2位为1则转移到routine_2,有1位为1则转移到routine_3,有0位为1则转移到routine_4
SUBAX,AX
MOVDL,X
TESTDL,01H
JZNEXT1
INCAL
NEXT1:
TESTDL,04H
JZNEXT2
NEXT2:
TESTDL,10H
JZNEXT3
NEXT3:
CMPAL,2
JGROUTINE_1
CMPAL,1
JGROUTINE_2
CMPAL,0
JGROUTINE_3
JGROUTINE_4
ROUTINE_1:
MOVY,1
JMPEXIT
ROUTINE_2:
MOVY,2
ROUTINE_3:
MOVY,3
ROUTINE_4:
MOVY,4
EXIT:
ret
4.5画图说明下列语句所分配的存储空间及初始化的数据值。
(不是原题)
(1)BYTE_VARDB‘BYTE’,12,-12H,3DUP(0,?
2DUP(1,2),?
)
(2)WORD_VARDW5DUP(0,1,2),?
-5,‘BY’,‘TE’,256H
(1)BYTE_VARDB'
BYTE'
12,-12H,3DUP(0,?
42,59,54,45,0D,EE,00,?
01,02,01,02,?
00,?
00,?
(2)WORD_BARDW5DUP(0,1,2),?
-5,'
BY'
'
TE'
256H
00,00,01,00,02,00,
?
?
FB,FF,59,42,
45,54,56,02
4.14对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?
FLDBDB?
TABLEADW20DUP(?
TABLEBDB‘ABCD’
(1)MOVAX,TYPEFLDB;
(AX)=0001H
(2)MOVAX,TYPETABLEA;
(AX)=0002H
(3)MOVCX,LENGTHTABLEA;
(CX)=0014H
(4)MOVDX,SIZETABLEA;
(DX)=0028H
(5)MOVCX,LENGTHTABLEB;
(CX)=0001H
5.12有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为0的项,并将后续项向前压缩,最后将数组的剩余部分补上0。
DSEGSEGMENT
MEMDW100DUP(?
DSEGENDS
CSEGSEGMENT
MAINPROCFAR
ASSUMECS:
CSEG,DS:
DSEG,ES:
DSEG
START:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX
MOVES,AX
BEGIN:
MOVSI,(100-1)*2
MOVBX,-2
MOVCX,100
COMP:
ADDBX,2
CMPMEM[BX]
JZCONS
LOOPCOMP
JMPFINISH
CONS:
MOVDI,BX
CONS1:
CMPDI,SI
JAENOMOV
MOVAX,MEM[DI+2]
MOVMEM[DI],AX
ADDDI,2
JMPCONS1
NOMOV:
MOVWORDPTR[SI],0
FINISH:
RET
MAINENDP
CSEGENDS
ENDSTART
5.14在首地址为TABLE的数组中按递增次序存放着100H个16位补码数,试编写一个程序把出现次数最多的数及其出现次数分别存放于AX和CX中。
TABLEDW100HDUP(?
DATADW?
COUNTDW0
BEGIN:
MOVBX,100H
MOVDI,0
NEXT:
MOVDX,0
MOVSI,0
MOVAX,TABLE[DI]
MOVCX,100H
COMP:
CMPTABLE[SI],AX
JNEADDR
INCDX
ADDR:
ADDSI,2
CMPDX,COUNT
JLEDONE
MOVCOUNT,DX
MOVDATA,AX
DONE:
DECBX
JNZNEXT
MOVCX,COUNT
MOVAX,DATA
RET
5.18把0~100D之间的30个数存入以GRADE为首地址的30字数组中,GRADE+i表示学号为i+1的学生的成绩。
另一个数组RANK为30个学生的名次表,其中RANK+i的内容是学号为i+1的学生的名次。
编写一程序,根据GRADE中的学生成绩,将学生名次填入RANK数组中。
(提示:
一个学生的名次等于成绩高于这个学生的人数加1。
程序如下:
GRADEDW30DUP(?
);
假设已预先存好30名学生的成绩
RANKDW30DUP(?
;
--------------------------------------------------------------------------
MAINPROCFAR
ASSUMECS:
CSEG,DS:
DSEG
START:
PUSHDS;
设置返回DOS
SUBAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX;
给DS赋值
MOVDI,0
MOVCX,30;
外循环计数器
LOOP1:
PUSHCX
内循环计数器
MOVSI,0
MOVAX,GRADE[DI]
MOVDX,1;
起始名次为第1名
LOOP2:
CMPGRADE[SI],AX;
成绩比较
JBEGO_ON
INCDX;
名次+1
GO_ON:
ADDSI,2
LOOPLOOP2
POPCX
MOVRNAK[DI],DX;
名次存入RANK数组
ADDDI,2
LOOPLOOP1
CSEGENDS;
以上定义代码段
ENDSTART
实验一:
一、实验内容
比较字符串:
试编写一程序:
比较两个字符串String1和String2所含的字符是否相同。
若相同则显示‘Match'
,否则,显示'
NoMatch!
'
datasegment
string1db'
Movethecursorbackward.'
string2db'
MovetheSursorbackward.'
mess1db'
Match.'
13,10,'
$'
mess2db'
Nomatch!
dataends
programsegment
mainprocfar
assumecs:
program,ds:
data,es:
data
start:
pushds
subax,ax
pushax
movax,data
movds,ax
moves,ax
leasi,string1
leadi,string2
cld
movcx,25
repzcmpsb
jzmatch
leadx,mess2
jmpshortdisp
match:
leadx,mess1
disp:
movah,9
int21h
mainendp
programends
endstart
实验三:
分支程序设计
实验内容
统计学生成绩result:
设有10个学生的成绩分别为56,69,84,82,73,88,99,63,100,80分。
试编写程序分别统计低于60分、60~69分,70~79分,80~89分,90~99分及100分的人数,并分别存放到s5,s6,s7,s8,s9,s10单元中。
成绩分等部分采用分支结构,统计所有成绩则用循环结构完成。
DATASSEGMENT
GRADEDW56,69,84,82,73,88,99,63,100,80
S5DW0
S6DW0
S7DW0
S8DW0
S9DW0
S10DW0
;
此处输入数据段代码
DATASENDS
STACKSSEGMENT
此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
MOVAX,DATAS
MOVDS,AX
此处输入代码段代码
MOVCX,10
MOVBX,OFFSETGRADE
COMPARE:
MOVAX,[BX]
CMPAX,60
JLFIVE
CMPAX,70
JLSIX
CMPAX,80
JLSEVEN
CMPAX,90
JLEIGHT
CMPAX,100
JLNINE
INCS10
JMPSHORTCHANGE_ADDR
NINE:
INCS9
EIGHT:
INCS8
SEVEN:
INCS7
SIX:
INCS6
FIVE:
INCS5
CHANGE_ADDR:
ADDBX,2
LOOPCOMPARE
MOVAH,4CH
INT21H
CODESENDS
6.3分析下面的程序,画出堆栈最满时各单元的地址及内容。
********************************************
S_SEGSEGMENTAT1000H;
定义堆栈段
DW200DUP(?
200*2=190H
TOSLABELWORD
S_SEGENDS
C_SEGSEGMENT;
定义代码段
C_SEG,SS:
S_SEG
MOVAX,S_SEG
MOVSS,AX
MOVSP,OFFSETTOS
MOVAX,0
┇
PUSHT_ADDR
PUSHF
POPF
POPAX
POPT_ADDR
C_SEGENDS;
代码段结束
******************************************
ENDSTART;
程序结束
1000:
0186
(FLAGS)
0188
(AX)
018A
(t_addr)
018C
0000
018E
(DS)
SP:
6.4分析下面的程序,写出堆栈最满时各单元的地址及内容。
STACKSEGMENTAT500H;
DW128DUP(?
STACKENDS
CODESEGMENT;
MAINPROCFAR;
主程序部分
CODE,SS:
STACK
MOVAX,STACK
MAINPARTOFPROGRAMGOESHERE
MOVAX,4321H
CALLHTOA
MAINENDP;
主程序部分结束
--------------------------------------------------------------------
HTOAPROCNEAR;
HTOA子程序
CMPAX,15
JLEB1
PUSHBP
MOVBP,SP
MOVBX,[BP+2]
ANDBX,000FH
MOV[BP+2],BX
POPBP
MOVCL,4
SHRAX,CL
B1:
ADDAL,30H
CMPAL,3AH
JLPRINTIT
ADDAL,7H
PRINTIT:
MOVDL,AL
MOVAH,2
INT21H
HOTAENDP;
HOTA子程序结束
CODEENDS;
程序结束;
********************************************
500:
00EC
00EE
IP
00F0
0003H
00F2
00F4
0002H
00F6
00F8
0001H
00FA
00FC
00FE
6.7设有10个学生的成绩分别是76,69,84,90,73,88,99,63,100和80分。
试编制一个子程序统计60~69分,70~79分,80~89分,90~99分和100分的人数,分别存放到S6,S7,S8,S9和S10单元中。
RECORDDW76,69,84,90,73,88,99,63,100,80
S6DW0
S7DW0
S8DW0
S9DW0
S10DW0
MOVCX,10
CALLCOUNT
┇;
后续程序
COUNTPROCNEAR;
成绩统计子程序
MOVAX,RECORD[SI]
MOVBX,10;
以下5句是根据成绩计算相对S6的地址变化量
DIVBL;
计算公式为:
((成绩)/10-6)*2送(BX)
MOVBL,AL;
此时(BH)保持为0不变
SUBBX,6;
应为只统计60分以上成绩
SALBX,1;
(BX)*2
INCS6[BX];
S6是S6,S7,S8,S9和S10单元的首地址
ADDSI,2
LOOPNEXT
COUNTENDP;
COUNT子程序结束
7.3给定宏定义
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 20