试编写一个汇编语言程序
汇编语言题库
汇编语⾔题库1⼤学课程《汇编语⾔程序设计》模拟试题⼀、单项选择题1、指令JMPFARPTRDONE属于(C)。
A.段内转移直接寻址B.段内转移间接寻址C.段间转移直接寻址D.段间转移间接寻址2、执⾏下⾯指令序列后,结果是(A)。
MOVAL,82HCBWA.AX=0FF82HB.AX=8082HC.AX=0082HD.AX=0F82H3、8088/8086存储器分段,每个段不超过(D)。
A.64K个字B.32K个字节C.1兆个字节D.64K个字节4、CPU发出的访问存储器的地址是(A)。
A.物理地址B.偏移地址C.逻辑地址D.段地址5、BUFDW10HDUP(3DUP(2,10H),3,5)上述语句汇编后,为变量BUF分配的存储单元字节数是(B)。
A.80HB.100HC.124D.1926、若AX=-15要得到AX=15应执⾏的指令是(A)。
A.NEGAXB.NOTAXC.INCAXD.DECAX7、8086/8088系统执⾏传送指令MOV时(A)。
A.不影响标志位B.影响DF⽅向标志C.影响SF符号标志D.影响CF进位标志8、MOVAL,79ADDAL,0B1H上⾯指令执⾏后,设置的标志位CF和OF的值是(D)。
A.CF=0,OF=1B.CF=1,OF=1C.CF=0,OF=1D.CF=1,OF=09、检查BUF的内容是否为正偶数,如是正偶数,则AL=0。
下⾯程序段正确的是(C)。
A.MOVAL,BUFB.MOVAL,BUFJNCK1MOVAL,0MOVAL,0K2:……K1:C.MOVAL,BUFD.MOVAL,BUFTESTAL,81HJNPK4JNZK3TESTAL,80HMOVAL,0JNZK4K3:MOVAL,0K4:10、下列指令中操作数在代码段中的是(A)。
A.MOVAL,42HB.ADDAL,BLC.SUB[BX],DID.INC[DI]11、与MOVBX,OFFSETVAR指令完全等效的指令是(D)。
汇编语言程序设计方法
C 名字前加 下划线
从右到左 调用程序
是
SYSCALL
从右到左 被调用程序
是
STDCALL 名字前加
下划线 (注)
被调用程序
是
PASCAL 名字变大写
BASIC 名字大写
FORTRAN 名字大写
从左到右 被调用程序
是
从左到右 被调用程序
是
从左到右 被调用程序
是
12
PROTO是过程声明伪指令,用于事先声明过程的结构。它的格 式如下:
结束处理部分
AGAIN: ADD AX,CX
;从20,19,……2,1倒序累加到AX
LOOP AGAIN ;每循环一遍,CX自动减1
MOV SUM,AX ;将累加和送入SUM单元
.EXIT 0
END
初始化部分
循环结束? 是 否
工作部分 修改部分 结束处理部分
7
二、用MASM 6.x循环控制伪指令实现循环结构
.CODE
.STARTUP
MOV AL, B
IMUL AL
MOV BX,AX MOV AL,A
;BX中为B的平方
IMUL C
MOV CX,4
IMUL CX
;AX中为4AC
.IF SWORD PTR BX>=AX ;比较B的平方和4AC的大小
MOV SIGN,1
;条件成立,SIGN得到1
.ELSE
MOV SIGN,0
.IF 条件表达式 ;条件为真(非0),执行分支体
分支体
[.ELSEIF 条件表达式
分支体
;前面IF条件为假,并且当前ELSEIF条件为真执行分支体
[.ELSE
;前面IF条件为假执行分支体
汇编语言程序例题0001
【例】试编写一程序计算以下表达式的值。
w = (v- (x * y + z -540 )) /x式中x、y、z、v均为有符号字数据。
设x、y、z、v的值存放在字变量X、Y、Z、V中,结果存放在双字变量W之中,程序的流程图如图所示。
DATA SEGMENTX DW 200Y DW 100Z DW 3000V DW 10000W DW 2 DUP (?)DATA ENDSSTACK SEGMENT STACKDB 200 DUP (0)STACK ENDSCODESEGMENTASSUME DS DATA CS: CODE SS: STACKSTART MOV AX DATAMOV DS AX ; DATA>AXMOV AX XIMUL Y ; (X) * (DX AXMOV CX AXMOV BX,DX ;(DX AX)TBX:CX)MOV AX,ZCWD ;(Z)符号扩展ADD CX,AXADC BX,DX;(BX: CX)+( DX:AX)BX:CX)SUB CX,540SBB BX,0 ;( BX:CX) - 5 40~BX:CX)MOV AX,VCWD ;(V)符号扩展SUB AX,CXSBB DX,BX ;( DX:AX)-((BX CX DX: AX)IDIV X ;( DX:AX)/XMOV W,AX ;商5MOV W+2 DX ;余数D©W+2MOV AH,4CHINT 21HCODEENDS ;退出DOS 状态END START【例】已知某班学生的英语成绩按学号(从 1 开始)从小到大的顺序排列在要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。
编写程序如下: STACK SEGMENT STACKDB 200 DUP(0)STACK ENDSDATA SEGMENTTAB DB 80 ,85,86,71,79,96DB 83 ,56,32,66,78,84NO DB 10ENGLIST DB ?DATA ENDSCODE SEGMENTASSUME DS: DATA,SS: STACK,CS: CODEBEGIN: MOV AX,DATAMOV DS,AXLEA BX,TABMOV AL,NODEL ALXLAT TABMOV ENGLIS,H ALMOV AH,4CHINT 21HCODEENDSTAB表中,END BEGIN【例】已知在内存中有一个字节单元NUM存有带符号数据,要求计算出它的绝对值后, 放入RESULT^元中。
IBM-PC汇编语言程序设计课后习题答案
第五章试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。
答:程序段如下:BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用INT 21HCMP AL, ‘a’ ;输入字符<‘a’吗JB STOPCMP AL, ‘z’ ;输入字符>‘z’吗JA STOPSUB AL, 20H ;转换为大写字母,用AND AL, 1101 1111B也可MOV DL, AL ;显示一个字符的DOS调用MOV AH, 2INT 21HJMP BEGINSTOP: RET编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。
答:程序段如下:BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用INT 21HCMP AL, ‘a’ ;输入字符<‘a’吗JB STOPCMP AL, ‘z’ ;输入字符>‘z’吗DEC AL ;得到前导字符MOV DL, AL ;准备显示三个字符MOV CX, 3DISPLAY: MOV AH, 2 ;显示一个字符的DOS调用INT 21HINC DLLOOP DISPLAYSTOP: RET将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL、BL、CL和DL中。
答:程序段如下:DSEG SEGMENTSTORE DB 4 DUP ()DSEG ENDS┇BEGIN: MOV CL, 4 ;右移四次MOV CH, 4 ;循环四次LEA BX, STOREA10: MOV DX, AXAND DX, 0FH ;取AX的低四位MOV [BX], DL ;低四位存入STORE中INC BXSHR AX, CL ;右移四次JNZ A10 ;循环四次完了码B10: MOV DL, STORE ;四组数分别放在AL、BL、CL和DL中MOV CL, STORE+1MOV BL, STORE+2MOV AL, STORE+3STOP: RET试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。
汇编语言习题及答案
汇编语言复习题简答题1.存储器地址为什么要分段?物理地址是如何形成的?2.IBM PC机的寻址方式(与数据有关的寻址方式)有几种?各举一例说明。
3.80x86微机的存储器中存放信息如下图所示。
试读出30022H与30024H字节单元的内容与30021H和30022H字单元的内容。
4.现有(DS)= 2000H,(BX)=0100H,(SI)= 0002H, (20100)= 12H, (20101)=34H, (20102)= 56H, (20103)=78H, (21200)=2AH, (21201)= 4CH, (21202)=B7H, (21203) = 65H,试说明下列各条指令执行完后AX的内容。
1)MOV AX,1200H2)MOV AX,BX3)MOV AX,[1200H]4)MOV AX,[BX]5)MOV AX,1100[BX]5.完成下列各式补码数的运算,并根据结果设置标志位SF,CF,ZF,OF,指出运算结果是否有效1)01001001b+10011101b2)01000001b-10101011b6.有符号定义语句如下:BUFF DB 1,2,3,’123’EBUFF DB 0L EQU EBUFF-BUFF问L的值为多少?为什么?答案:1、IBM PC系列机的字长为16位,能够访问的最大存储空间64KB,而在IBM PC内存为1MB的情况下,访问这1MB的存储空间需要20位。
为了解决字长为16位的机器访问1MB的存储空间,将1MB空间每16B分为一段,共64K段,以16位段地址:16位偏移地址的形式组成,物理地址通过如下方式计算:物理地址=段地址×10h + 偏移地址2.IBM PC机的寻址方式有7种:1)立即寻址:MOV AX, 1234H;2)寄存器寻址:MOV AX, BX;3)直接寻址:MOV AX, [1234H];4)寄存器间接寻址:MOV AX, [BX];5)寄存器相对寻址:MOV AX, 20H[BX];6)基址变址寻址:MOV AX, [BX][SI];7)相对基址变址寻址:MOV AX, 100H[BX][SI];3.解:(30022H)= 12H(30024H) = 56H(30021H) = 12CDH(30022H) = 3412H4.解:(1)MOV AX,1200H解:(AX)=1200H(2)M OV AX,BX解:(AX)= 0100H(3)M OV AX,[1200H]解:物理地址=(DS)×10H+1200H(AX) = 4C2AH(4)M OV AX,[BX]解:物理地址=(DS)×10H+0100H=20100H(AX)=3412H(5)M OV AX,1100[BX]解:物理地址=(DS)×10H+0100H+1100H=21200H(AX)=4C2AH5.(1)01001001b+10011101b解:01001001+ 10011101————————11100110 由此可得:SF=1 CF=0 ZF=0 OF = 0 计算结果有效(2)01000001b-10101011b解:01000001- 10101011————————=> 01000001+ 01010101————————10010110 由此可得:SF=1 CF=1 ZF=0 OF=1 减法计算中,被减数、减数符号相反,结果符号与减数相同,OF=1计算结果无效6.有符号定义语句如下:BUFF DB 1,2,3,’123’EBUFF DB 0L EQU EBUFF-BUFF问L的值为多少?为什么?解:根据数据段的定义,BUFF长度定义为6个字节,分别存放1,2,3,‘1’,‘2’,‘3’,而后紧接着为EBUFF的地址,故L值为6程序题1 MOV BL,64HMOV CL,03HXOR AX,AXAGAIN:ADD AL,BLADC AH,0DEC CLJNZ AGAIN问:(1)该程序段完成的功能是:(2)AX=________。
微机原理---汇编语言习题(完整参考答案)
微机原理---汇编语⾔习题(完整参考答案)MIS 硬件原理复习内容1.数的不同进制转换,原码、反码、补码转码,BCD码2.掌握D触发器逻辑3.D触发器组成的电路:卡诺图及简化、真值表、波形图、状态转换图4.三态门、总线结构5.存储器扩展⽅法:地址总线的作⽤,内存分页技术,地址译码⽅法,译码器6.86X 系列CPU 结构框图7.8086寄存器组,寻址⽅式8.指令,伪指令9.数据定义,完整程序结构10.汇编语⾔上机及调试过程1.分别指出下列指令中的源操作数和⽬的操作数的寻址⽅式:(1)MOV SI, 200(2)MOV CX, DA TA[SI](3)ADD AX, [BX][DI](4)AND AX, BX(5)PUSHF2.指出指令MOV AX, 2010H 和MOV AX, DS:[2010H]的区别3.写出以下指令中内存操作数的所在地址(1)MOV AL, [BX+5](2)MOV [BP+5], 5(3)INC BYTE PTR[SI+3](4)MOV DL, ES:[BX+DI](5)MOV BX, [BX+SI+2]4.判断下列指令书写是否正确(1)MOV DS, 0100H (错)(2)MOV AL, BX (错)(3)MOV BL, F5H (错)(4)MOV DX, 2000H (对)(5)INC [BX] (对)(6)MOV 5, AL (错)(7)MOV [BX], [SI] (错)5.若SP=2000H, AX=3355H, BX=4466H, 试指出执⾏下列指令后有关寄存器的值:(1)PUSH AX;执⾏后AX=? SP=? (AX=3355H SP=1FFEH)(2)PUSH AXPUSH BXPOP DX;执⾏后AX=? DX=? SP=?(AX=3355H DX=4466H SP=1FFEH)6.假设想从100中减去AL中的内容,⽤SUB 100, AL是否正确?如果不对,应⽤什么⽅法?7.有如下程序,当AL某位为何值时,可将程序转⾄AGIN2语句。
x86汇编语言编写第一个汇编程序helloworld
x86汇编语⾔编写第⼀个汇编程序helloworld ⽬录⼀、准备运⾏环境先准备汇编语⾔运⾏环境,在此下载:打开DOSBox0.74-win32-installer,安装。
⼆、编写汇编代码在汇编语⾔中,⽤分号;表⽰注释,类似于C/C++的//表⽰注释。
⼀个汇编程序的固定语法格式:;数据段data segment;此处定义数据变量类型data ends;代码段code segmentassume cs:code,ds:datastart:mov ax,datamov ds,ax;------;此处写需要实现的功能;------mov ah,4ch ;4ch表⽰从⽤户程序返回操作系统,结束程序int 21hcode endsend start输出"hello world"的代码:;数据段data segment;定义字节⼤⼩(8位)的字符串,变量名为string;db表⽰字节;0dh,0ah表⽰回车换⾏;$表⽰字符串终⽌符string db 'Hello World!',0dh,0ah,'$'data ends;代码段code segmentassume cs:code,ds:datastart:;push ds;mov ax,0;push axmov ax,datamov ds,ax;------lea dx,stringmov ah,09h ;ah是ax的⾼8位,功能号09h表⽰输出dx指向的字符串stringint 21h ;中断指令,调⽤⽤户程序,执⾏ah中设置的09h号功能;------mov ah,4ch ;功能号4ch表⽰从⽤户程序返回操作系统,结束程序int 21hcode endsend start本地可以⽤notepad++,将语⾔设置为A-Assembly,⽀持汇编语⾔的语法⾼亮,看着会⽐较舒服。
notepad++⽂本编辑器显⽰的语法⾼亮很好看:三、⽣成汇编程序并执⾏将第⼀步中下载的masm5⽂件夹存于D盘,⽐如路径为D:\masm5,然后将编写的代码⽂件保存为hello.asm,存于D:\masm5。
微机原理及应用试卷编程题
一.编程题 (共43题,430分)1.1 [库中题号:060030] 10分编写完整的8086汇编程序:将字符缓冲区A的字符'1234567890'倒序存放到缓冲区B中。
1.2 [库中题号:060029] 10分编写一个程序,接收从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用XLAT指令变换)存入内存缓冲区BUFFER。
加密表为;输入数字: 0,1,2,3,4,5,6,7,8,9密码数字: 7,5,9,1,3,6,8,0,2,41.3 [库中题号:060028] 10分试编写程序,它轮流测试两个设备的状态寄存器,只要一个状态寄存器的第0位为1,则与其相应的设备就输入一个字符;如果其中任一状态寄存器的第3位为1,则整个输入过程结束。
两个状态寄存器的端口地址分别是0024和0036,与其相应的数据输入寄存器的端口则为0026和0038,输入字符分别存入首地址为BUFF1和BUFF2的存储区中。
1.4 [库中题号:060027] 10分把0~10010之间的30个数,存入首地址为GRAD的字数组中,GRAD+i表示学号为i+1的学生成绩。
另一个数组RANK是30个学生的名次表,其中RANK+I的内容是学号为i+1的学生的名次。
试编写程序,根据GRAD中的学生成绩,将排列的名次填入RANK数组中(提示:一个学生的名次等于成绩高于这个学生的人数加1)。
1.5 [库中题号:060026] 10分已知整数变量A和B,试编写完成下述操作的程序:(1)若两个数中有一个是奇数,则将该奇数存入A中,偶数存入B中;(2)若两个数均为奇数,则两数分别加1,并存回原变量;(3)若两个数均为偶数,则两变量不变。
1.6 [库中题号:060025] 10分试编写完整的程序,要求从键盘输入3个16进制数,并根据对3个数的比较显示如下信息:(1)如果3个数都不相等则显示0;(2)如果3个数中有2个数相等则显示2;(3)如果3个数都相等则显示3。
汇编程序练习题目
1.已知(AX)=1234H,执行下述三条指令后,(AX)=( D )MOV BX,AXNEG BXADD AX,BXA.1234H B.0EDCCH C.6DCCH D.0000H 2.写出完成下述功能的程序段:(1)传送25H到AL寄存器(2)将AL的内容乘以2(3)传送15H到BL寄存器(4)AL的内容乘以BL的内容并请写出最后(AX)=?答:(1)MOV AL, 25H(2)SHL AL, 1(3)MOV BL, 15H(4)MUL BL最后,(AX)=612H =1554一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是( c )A.12CSBH B.12B6BH C.12C59H D.12BFEH1、在实模式下,段地址和偏移地址为3017:000A的存储单元的物理地址是3017AH?如果段地址和偏移地址是3010:002A和3010:007A的存储单元的物理地址分别是3017AH 和3017AH选择题:循环指令loop again与(A)等价A dec cx;jnz againB inc cx;jnz againC mul cx;jnz againD add cx;jnz again2程序写出结果:mess db 'chengxujieguo''13''10''$'mov bx,offset messmov ax,10mov dl,3sub ax,1mul dladd bx,axmov cx,13a:mov dl,[bx]mov ah,02int 21hinc bxloop amov ah,2dhint 21hmov ah,2ahint 21h答案:chengxujieguo1.指令MOV AX,[BX+4000H]的寻址方式为(B)A 寄存器间接寻址 B、寄存器相对寻址 C、立即寻址 D、直接寻址2.试编写一程序段,要求在长度为100H字节的数组中,找出大于42H的无符号数的个数并存入字节单元UP中,找出小于42H的无符号数的个数并存入字节单元DOWN中。
汇编语言第三五章课后题答案
3.1给定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么?(1) 立即寻址(2) 直接寻址(3) 使用BX的寄存器寻址(4) 使用BX的简接寻址(5) 使用BX的寄存器相对寻址(6) 基址变址寻址(7) 相对基址变址寻址答:(1) 操作数在指令中,即立即数;(2) EA=D=7237H;(3) 无EA,操作数为(BX)=637DH;(4) EA=(BX)=637DH;(5) EA=(BX)+D=0D5B4H;(6) EA=(BX)+(SI)=8E18H;(7) EA=(BX)+(SI)+D=1004FH;超过了段的边界,最高进位位丢失,因此EA=004FH。
3.2试根据以下要求写出相应的汇编语言指令(1) 把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中。
(2) 用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。
(3) 用寄存器BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和(CX)相加,并把结果送回存储器中。
(4) 用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回存储单元中。
(5) 把数0B5H与(AL)相加,并把结果送回AL中。
答:(1) ADD DX, BX(2) ADD AL, [BX][SI](3) ADD [BX+0B2H], CX(4) ADD WORD PTR [0524H], 2A59H(5) ADD AL, 0B5H3.3写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。
要求使用以下几种寻址方式:(1) 寄存器间接寻址(2) 寄存器相对寻址(3) 基址变址寻址答:(1) MOV BX, OFFSET BLOCKADD BX, (6–1)*2MOV DX, [BX](2) MOV BX, OFFSET BLOCK 改为:MOV BX, (6-1)*2MOV DX, [BX+(6–1)*2] 也可MOV DX,BLOCK[BX](3) MOV BX, OFFSET BLOCKMOV SI, (6–1)*2MOV DX, [BX][SI]3.4 现有(DS)=2000H ,(BX)=0100H ,(SI)=0002H ,(20100H)=12H ,(20101H)=34H ,(20102H)=56H ,(20103H)=78H ,(21200H)=2AH ,(21201H)=4CH ,(21202H)=B7H ,(21203H)=65H ,试说明下列各条指令执行完后AX 寄存器的内容。
汇编语言程序设计实验篇(emu8086)
1.汇编语言程序设计实验篇1.1.汇编系统软件简介Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。
它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。
该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。
利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。
1.1.1创建程序 TEMPLATE程序本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。
打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。
在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮。
在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。
输入全部指令后,单击按钮,保存相应的程序段。
2.EXE TEMPLATE程序本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。
打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。
在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮。
在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。
汇编语言复习题
汇编语言期末复习题一、单项选择题1.一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区第一个字单元的物理地址是()。
A.12B5BH B.12B6BH C.12C59H D.12BFEH2.在IN AL,PORT指令中,PORT称为()。
A.立即数B.有效地址 C.端口地址 D.寄存器名3.在下列指令的中,不能实现把AX寄存器内容清零的指令是()。
A.SUB AX,AX B.XOR AX,AXC.OR AX,0000H D.AND AX,0000H4.条件转移指令JNE的测试条件为()。
A.ZF=0B.CF=0C.ZF=1D.CF=15.8086CPU在基址加变址的寻址方式中,变址寄存器可以为()。
A.BX或CX B.CX或SIC.DX或SI D.SI或DI6.设(AX)=1000H,NEG AXNOT AX执行上述两条指令后,正确的结果是()。
A.(AX)=1001H B.(AX)=0FFFH;C.(AX)=1000H D.(AX)=0111H。
7.串指令中的目的操作数地址一定是由()提供。
A.ES:[DI]B.SS:[BP]C.DS:[SI]D.CS:[IP]8.将DX的内容除以2,正确的指令是()。
A.DIV 2 B.DIV DX,2C.SAR DX,1D.SHL DX,19.用户为了解决自己的问题,用汇编语言所编写的程序,称为()。
A.目标程序B.汇编语言源程序C.可执行程序D.汇编程序10.用一条指令仅实现将AX←BX+SI的方法是()。
A.XCHG AX,[BX][SI]B.MOV AX,[BX+SI]C.LEA AX,BX[SI]D.LEA AX,[BX][SI]11.设SP初值为2000H,执行指令“PUSH AX”后,SP的值是()。
A.1FFFH B.1998H C.1FFEH D.2002H12.一个字为()位二进制数。
A.8位B.16位C.32位D.64位13. 下列四个寄存器中,可作为八位寄存器的是()。
汇编语言期末试卷及答案
汇编语言期末试卷及答案一、单项选择题1、CPU发出的访问存储器的地址是(A)。
A.物理地址B.偏移地址C.逻辑地址D.段地址2、下列指令中操作数在代码段中的是(A)。
A.MOV AL,42HB.ADD AL,BLC.SUB [BX],DID.INC [DI]3、与MOV BX,OFFSET VAR指令完全等效的指令是(D)。
A.MOV BX,VARB.LDS BX,VARC.LES BX,VARD.LEA BX,VAR4、表示过程定义结束的伪指令是(A)。
A.ENDPB.ENDSC.ENDD.ENDM5、BUF1 DB 3 DUP(0,2 DUP(1,2),3)COUNT EQU $ - BUF1符号COUNT等价的值是(B )。
A.6B.18C.16D.86、下列寄存器中,作为16位寄存器的是(D)。
A. ALB. BLC. CHD.DX7、在程序运行过程中,确定下一条指令的物理地址的计算表达式是(C)。
A.DS*16+SIB. ES*16+DIC. CS*16+IPD. SS*16+SP8、物理地址(10FF0H )=10H,(10FF1H )=20H,(10FF2H )=30H,从地址10FF1H中取一个字的内容是(B)。
A.1020HB.3020HC.2030HD.2010H9、将AX 清零,下列指令错误的是(C)。
A.SUB AX,AXB.XOR AX,AXC.OR AX,00HD.AND AX,00H10、完成同指令XCHG AX,BX相同功能的指令或指令序列是(D)。
A. MOV AX,BXB. MOV BX,AXC. PUSH AXD. MOV CX,AXPOP BX MOV AX,BXMOV BX,CX11、JMP BX 的目标地址的偏移量为(A)。
A. BX 的内容B. BX 所指向的内存单元的内容C. IP + BX 的内容D. IP + [BX]12、可用作寄存器间接寻址或基址、变址寻址的地址寄存器,正确的是(D)。
利用汇编语言编写找出10个无符号数中最大数和最小数分别存储程序
利用汇编语言编写找出10个无符号数中最大数和最小数分别存储程序一、要求:已知在DATA开始的字单元中存放有10个无符号整数,试编制程序挑选出其中的最大数并存放到MAXV单元中,挑选出最小数并存放到MINV单元中。
二算法分析1、求最大值:10个数据存储在限制为10个数据的数组中,BX中存储数组,将首地址数据赋值给AX,随后完成指针后移同时数据循环与AX比较,如果AX<[BX],那么 AX赋值给BX,否则指针后移,直到指针指到数组末尾时循环结束,最后将AX赋值给MAXV,然后调用DOS 输出数据。
2求最小值:将首地址数据赋值给AX,随后完成指针后移同时数据循环与AX比较,如果AX>[BX],那么 AX赋值给BX,否则指针后移,直到指针指到数组末尾时循环结束,将AX赋值给MAXV,然后调用DOS 输出数据。
三扩展应用顾名思义,此程序的设计是为了在无序的一组数据中挑选出其最值。
在实际中,这样的要应用许许多多,这样,我们可以把这个算法付诸实践,丰富我们的乐趣,使我们的程序设计从理论上升到实践,从而能力得到质的飞跃。
设想,再一次歌手比赛中,评委打完分后,计分原则是去头和尾,此时,本程序可以迅速查找到其最高分以及最低分,并删除之,这是一个很好的应用。
再看看我们的学校,每年必不可少的就是考试了,为了各项评比,我们需要选出最高分,无论怎么评比,只要设置一个关键字,定义其属性就可以得到最优秀的,这一应用节省了我们的时间,对比过去利用“穷举”的查找法,这无疑是质的飞跃啊!在软件中,可以用这种算法来实现数据、字符等的寻优操作。
总之,只要没有到共产主义社会,就会就会存在竞争,就存在优胜劣汰,从而少不了的就是选择更优秀,淘汰垃圾,那么查找最优或者最差的算法就不会淘汰。
四程图分析设计:程序分为查找、排序的主程序,以及它所要调用的循环程序,程序中包含有延时子程序,主程序为循环结构,以便循环比较,查找到最值。
查找最值程序中,可以按分如下结构化算法去编辑程序:(查找MAXV)(查找MINV)五结束语附录a:(源代码);..........................数据段 .......................... data segmentary db 30,16,8,-1,13,49,7,11,4,20 ;数组个数count db 10 ;数组元素个数max db ?min db ?address dw 4dup(?) ;地址表缓冲区data endsstack segment para stack 'stack'db 256dup(?)stack endscode segmentassume cs:code,ds:data ;..........................代码段 ..........................start:mov ax,datamov ds,axmov address, offset ary;mov address+2, offset countmov address+4, offset maxmov address+6, offset minlea bx,address ;地址表首地址送入寄存器BX call search ;搜索最大值及最小值mov al,maxcall outdata ;显示最大值call crlf ;回车换行mov al,mincall outdata ;显示最小值mov ah,4ch ;返回DOSint 21hsearch procpush bx ;现场保护push cxpush dxpush bppush sipush dimov bp,[bx+2] ;数组长度单元地址送入BPmov cx,ds:[bp] ;数组长度—》CXdec cxmov si,[bx+4]mov di,[bx+6]mov bp,[bx]mov dl,ds:[bp]mov [si],dlmov [di],dlinc bplop:mov dl,ds:[bp]cmp dl,[si]je nextmov [si],dljmp next minc:cmp dl,[di]jge nextmov [di],dl next:inc bploop loppop dipop sipop bppop dxpop cxpop bxretsearch endp outdata proc nearpush axpush bxpush cxpush dxmov bl,almov cl,4shr al,clor al,30hcmp al,3ahjb outhadd al,07h outh:mov dl,almov ah,02hint 21hmov dl ,bland dl,ofhor dl,30hcmp dl,3ahjb outladd dl,07h outl:mov ah,02hint 21hmov dl,'h'int 21hpop dxpop cxpop bxpop axretoutdata endpcrlf procpush axpush dxmov dl,0ahmov ah,2int 21hmov dl,0dhmov ah,2int 21hpop dxpop axretcrlf endpcode endsend start附录b: 参考书目1、沈美明 IBM-PC汇编语言程序设计2、张志明汇编语言程序设计3、耿秀华汇编语言程序设计4、沈美明、温东婵 IBM-PC汇编语言程序设计(第二版)。
汇编语言小程序例子
盛年不重来,一日难再晨。
及时宜自勉,岁月不待人。
1.编写统计AX中1、0个数的源程序。
1的个数存入CH,0的个数存入CL。
CODE SEGMENTASSUME CS:CODESTART: MOV CX, 0MOV DX,17AA1: SUB DX, 1JZ AA3SHL AX, 1JNC AA2INC CHJMP AA1AA2: INC CLJMP AA1AA3: MOV AH,4CHINT 21HCODE ENDSEND START2.编写比较两个字符串STRING1和STRING2所含字符是否完全相同的源程序,若相同则显示“MATCH”,若不相同则显示“NO MATCH”。
程序:DATA SEGMENTR1 DB 'MATCH',0AH,0DHR2 DB 'NO MATCH',0AH,0DH STRING1 DB 'XXXXX'N1 EQU $-STRING1STRING2 DB 'YYYYY'N2 EQU $-STRING2DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV AX,N1CMP AX,N2JNZ AA1ADD AX,1LEA SI,STRING1LEA DI,STRING2AA2: MOV BL,[SI]MOV BH,[DI]INC SIINC DISUB AX,1JZ AA3CMP BL,BH JZ AA2JMP AA1AA3: LEA BX,R1 MOV CX,7 AA4: MOV DL,[BX] INC BXMOV AH,2INT 21HLOOP AA4JMP EAA1: LEA BX,R2 MOV CX,10 AA5: MOV DL,[BX] INC BXMOV AH,2INT 21HLOOP AA5INT 21HCODE ENDSEND START3.从键盘读入一个四位的十六进制数,CRT显示等值的二进制数.由于每个十六进制数位对应4个二进制,所以每读入一个十六进制位后,即可将其对应的4个二进制位依次输出。
汇编模拟题-----编程题
1、设在数据段中有X,Y两变量(字节单元),试编写程序段计算(只写有关程序功能的指令):Y= X 当X >=0Y= 0 当X<0解:mov al,xcmp a;,0jge A1mov al,0A1:mov y,al2在STR单元开始定义了一长度为LEN字节的字符串,统计出其中大写字母的个数并存放到LARGE字节单元中。
请编一完整的源程序。
DATA SEGMENTSTR DB‘… …’LEN EQU $-STRLARGE DB ?DATA ENDSCD EGMENTASSUME CS:CD,DSATALARG PROC FARMOV AX,DATAMOV DS,AXLEA SI,STRMOV CX,LENMOV BL,0NT:CMP BYTE PTR [SI],‘A’JB NOLARGCMP BYTE PTR [SI],‘Z’JA NOLARGINC BLNOLARG:INC SILOOP NTMOV LARGE,BLMOV AH,4CHINT 21HLARG ENDPCD ENDSEND LARG3、已知DAT1字节单元有一个数据,试编制一程序段将该数据的低4位变为1010B,最高位(第7位)置1,其余3位不变,结果送DAT2字节单元。
MOV AL,DATA1AND AL,70HADD AL,8AHMOV DATA2,AL4、在N1和N2两数据区中,分别有10H个带符号数。
试编制一源程序,找出对应项中较小的数据,并将这些较小的数据存入N3数据区中(要求:对应项比较时必须用CMPS指令)。
DATA SEGMENTN1 DB ××,××,××,……N2 DB ××,××,××,……N3 DB 10H DUP(0)DATA ENDS解:STACKSEG SEGMENT STACKDB 1024 DUP(0)STACKSEG ENDSDATA SEGMENTN1 DB 5Ah,6Fh,2Eh,0D8h,0E3h,9Ch,0DBh,0B7h,5Bh,21h,35h,8Eh,4Ah,15h,58h,75hN2 DB 58h,0FFh,5Eh,38h,0C7h,0A1h,26h,86h,48h,35h,48h,16h,0BAh,0FAh,0DFh,0E9hN3 DB 10H DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSEGSTART: MOV AX,DATAMOV DS,AXINC AXMOV ES,AXMOV SI,0FFFFHMOV DI,0FFFFHMOV CX,10hMOV BX,OFFSET N3CLDAGAIN: CMPS BYTE PTR N1,BYTE PTR N2JL N1LESMOV AL,[SI+10h]MOV [BX][SI],ALJMP CMPAGAINN1LES: MOV AL,[sI]MOV [BX][SI],ALCMPAGAIN: dec cxjnz againMOV AH,4CHINT 21HCODE ENDSEND START5、加密移动字符串,设缓冲区SBUFF中有20个小写字母a,将每个a加上它相对于缓冲区的位移量后传送到缓冲区DBUFF。
中石油 汇编语言期末考试试题(含答案)
汇编语言程序设计一、填空题1。
可屏蔽中断就是它的请求是否被CPU响应要受2. 使用LINK3. 在寄存器间接寻址中,如果指令中指定的寄存器为BP,4.DOS系统功能调用方式为:(1)置入口参数;(2)中断程序编号送5.通常主程序和子程序间参数传送的方法有三种:用寄存器传递、用存储单元传递、用堆栈传递(顺序可调换)6。
CPU暂停当前程序的执行,转而执行处理紧急事务的程序,并在该事务处理完后能自动恢复执行原先程序的过程。
在此,称引起紧急事务的事件为中断源。
7ES89.键盘I/O、显示I/O和打印I/O1011.若DS=0F3EH,SI=2000H,COUNT=0A8H,指令MOV AX,(SI+COUNT)中,源操作数的有效地址EA,其物理地址为_1148H __。
二、单项选择题1.CPU要访问的某一存储单元的实际地址称(C)A.段地址B.偏移地址C.物理地址D.逻辑地址2.某存储单元的物理地址是12345H,可以作为它的段地址有(D)A.2345H B.12345H C.12340H D.1234H3.执行后使BX=0的同时也使CF=0,OF=0的指令是( A )A.XOR BX,BX B.OR BX,BX C.AND BX,BX D.CMP BX,BX4.循环控制指令LoopNZ/LoopNE控制循环继续执行的条件是( B )A.CX≠0且ZF=1B.CX≠0且ZF=0 C.CX≠0或ZF=1D.CX≠0或ZF=05.在执行DAA指令,当高四位BCD码校正时产生进位,如要把此进位值送入AH中,对这进位值的操作应是( C )A.DAA校正指令的功能已自动加在AH中B.进位值在AF中,校正后根据AF内容再加在AH中C.进位值在CF中,校正后根据CF内容再加在AH中D.进位值在AL最高位上,校正后根据AL最高位内容再加在AH中6.表示过程定义结束的伪指令是( A )A。
ENDP B。
ENDS C.END D。
汇编语言程序设计实验报告
实验报告实验名称汇编语言程序设计||专业班级:信息安全学号:姓名:实验一汇编语言上机过程和Debug常用调试命令一.实验目的:学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。
二.实验题目:熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。
在调试过程中,学习及掌握debug程序的各种操作命令。
三.问题描述:试编写一程序:比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘match’; 否则,显示‘no match’。
四.方法说明:a) 使用ws、tc或EDIT编辑程序来建立源文件,然后存盘,使系统返回DOS。
b) 用汇编程序masm(或asm)对源文件汇编产生目标文件obj如:汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。
c) 用连接程序link 产生执行文件EXE.d) 执行程序,可直接从DOS执行程序。
e) 使用debug程序调试程序的方法。
五.实验步骤:1.调用字处理程序EDIT 建立以sample.asm文件datarea segmentstring1 db ‘move the cursor backward.’string2 db ‘move the cursor backward.’mess1 db ‘Match..’,13,10,’$’mess2 db ‘No match!..’,13,10,’$’datarea endsprognam segmentmain proc farassume cs:prognam,ds:datarea,es:datarea start:push dssub ax,axpush axmov ax,datareamov ds,axmov es,axlea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx, mess1disp:mov ah,09int 21hretmain endpprognam endsend start2.对源文件汇编产生目标文件obj D:\masm 文件名。
微机原理与接口技术试题库(含答案)
一、问答题:1、微型计算机是由五部分组成,包括控制器,运算器,存储器、输入设备,输出设备;控制器控制计算机运转,计算器主要是算术运臬和逻辑运算,存储器主要是存储信息,输入设备主要是输入信息给计算机,输出设备主要是计算机输出信息。
2、IBM PC机的主存主要有只读存储器和随机存储器。
只读存储器只能读出,不能写入,随机存储器可以写入也可以读出。
3、8086微处理器的字长为16位,能直接访问的存储单元可以是2个字节。
4、8088微处理器的逻辑地址两部分组成,包括段地址和偏移地址;物理地址=段地址*16+偏移地址。
5、如果一个程序在执行前(CS)=0A7F0H,(IP)=2B40H,该程序的起始地址=0A7F0H*16+2B40H=0AAA40H。
6、02003H02002H02001H02000H77种(1).立即数寻址(2).寄存器寻址(3).直接寻址(4).寄存器间接寻址(5).寄存器相对寻址方式(6).基址变址寻址方式(7).相对基址变址寻址方式二、填空题1、CPU、存储器2、4、4、ALU3、逻辑地址、物理地址4、偏移地址,段基址*16+偏移地址,段寄存器5、码、操作数6、寄存器相对寻址方式,寄存器间接寻址,直接寻址,基址变址寻址方式,寄存器寻址,立即数寻址,相对基址变址寻址方式,寄存器相对寻址方式7、ZF,CF,SF,OF8、1,有符号9、05AEH,4000H10、0AB0H,1,1,0F8B0H,1,1三、选择题1、C2、A3、C4、B5、A6、D7、C8、B9、C 10、D四、是非判断题1、×2、×3、√4、√5、×6、×五、根据以下要求选用相应的指令或指令序列1、MOV AX,4629H2、LDS BX,DA TA3、ADD DX,BX4、SUB AX,0360H5、MOV BX,ES:[0500H]6、MOV CL,2SHL AL,CL7、IMUL BL8、MOV CX,09、OR DX,0E00H5、AND AL,0FH6、XOR CL,0F0H7、MOV CL,2SAR AX,CL13、MOV CL,4ROL AL,CL14、SHL AX,1RCL DX,115、NEG DXNEG AXSBB DX,0=======================================================一、回答下列问题1、设V ALA EQU 200V ALB EQU 30V ALC EQU 1BH下列表达式的值各为多少?(1)(V ALA*V ALC+V ALB)/V ALC(2)(V ALB AND 0FH)OR (V ALB XOR 0FH)(3)(V ALA GE V ALB )AND 0FH2. 根据下列要求编写一个汇编语言程序::(1)代码段的段名为COD_SG(2)数据段的段名为DA T_SG(3)堆栈段的段名为STK_SG(4)变量HIGH_DA T所包含的数据为95(5)将变量HIGH_DAT装入寄存器AH,BH和DL(6)程序运行的入口地址为START3、定义一个数据段的字符变量和数据变量。
2、x、y、z、v均为字变量,在x、y、z、v字单元中存放是16位带符号数。试编写汇编语
2、x、y、z、v均为字变量,在x、y、z、v字单元中存放是16位带符号数。
试编写汇编语在汇编语言中,我们通常需要使用寄存器来进行计算、存储和加载数据。
在本题中,我们需要使用x、y、z、v四个字变量,这意味着我们需要使用四个寄存器来分别加载这些变量。
汇编语言中的寄存器通常包括通用寄存器、特殊寄存器(比如标志寄存器)和控制寄存器。
在本题中,我们需要使用通用寄存器,因为我们要对数据进行计算。
通用寄存器通常包括AX、BX、CX、DX等。
首先,我们需要将x、y、z、v四个字变量分别存储到四个寄存器中。
为了简化问题,我们假设x、y、z、v分别存储在内存地址0x100、0x104、0x108、0x10C中。
为了将这些变量加载到寄存器中,我们可以使用MOV指令,它用于将源操作数的值复制到目的操作数中。
例如,我们可以使用以下指令将x的值加载到AX寄存器中:MOV AX, [0x100] ; 将内存地址0x100中的值加载到AX寄存器中类似地,我们可以将y、z、v分别加载到BX、CX、DX寄存器中:MOV BX, [0x104] ; 将内存地址0x104中的值加载到BX寄存器中MOV CX, [0x108] ; 将内存地址0x108中的值加载到CX寄存器中MOV DX, [0x10C] ; 将内存地址0x10C中的值加载到DX寄存器中接下来,我们需要对这些变量进行计算。
根据题目要求,我们需要将x+y+z+v的值存储在x变量的位置。
因此,我们需要先将x的值存储在一个临时变量中,然后将其与y、z、v的值相加,并将结果存储到x的位置。
为了实现这个过程,我们可以先将x的值存储到一个寄存器中,比如AX寄存器:MOV AX, [0x100] ; 将x的值加载到AX寄存器中接下来,我们可以将y、z、v的值相加,并将结果存储到AX寄存器中:ADD AX, [0x104] ; 将y的值加到AX寄存器中ADD AX, [0x108] ; 将z的值加到AX寄存器中ADD AX, [0x10C] ; 将v的值加到AX寄存器中现在,AX寄存器中的值就是x+y+z+v的结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来. 答案:abc: mov ah,1int 21hcmp al,'a'jb stopcmp al,'z'ja stopsub al,20hmov dl,almov ah,2int 21hjmp abcstop: ret2、编写程序,比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示"MATCH",若不同则显示"NO MATCH".答案:datarea segmentstring1 db 'asfioa'string2 db 'xcviyoaf'mess1 db 'MATCH','$'mess2 db 'NO MATCH','$'datarea endsprognam segmentmain proc farassume cs:prognam,ds:datareastart:push dssub ax,axpush axmov ax,datareamov ds,axmov es,axbegin:mov cx,string2-string1mov bx,mess1-string2cmp bx,cxjnz dispnolea dx,addrlea si,string1lea di,string2repe cmpsbjne dispnolea dx,mess1int 21hretdispno:mov ah,9lea dx,mess2int 21hretmain endpprognam endsend start3、试编写程序,要求从键盘输入3个16进制数,并根据对3个数的比较显示如下信息:(1)如果3个数都不相等则显示0;(2)如果3个数中有2个数相等则显示2;(3)如果3个数都相等则显示3.答案:data segmentarray dw 3 dup( )data endscode segmentmain proc farassume cs:code,ds:datastart:push dssub ax,axpush axmov ax,datamov ds,axmov cx,3lea si,arraybegin:push cxmov cl,4mov di,4mov dl,' 'mov ah,02int 21hmov dx,0input:mov ah,01int 21hshl dx,clor dl,aldec dijne inputmov [si],dxadd si,2pop cxloop begincomp:lea si,arraymov dl,0mov ax,[si]mov bx,[si+2]cmp ax,bxjne next1add dl,2next1:cmp [si+4],axjne next2add dx,2next2:cmp [si+4],bxjne numadd dl,2num:cmp dx,3jl dispmov dl,3disp:mov ah,2add dl,30hint 21hretmain endpcode endsend start4、已知整数变量A和B,试编写完成下述操作的程序:(1)若两个数中有一个是奇数,则将该奇数存入A中,偶数存入B中;(2)若两个数均为奇数,则两数分别加1,并存回原变量;(3)若两个数均为偶数,则两变量不变.答案:dseg segmenta dwb dwdseg endscseg segmentmain proc farassume cs:cseg,ds:dsegstart: push dssub ax,axpush axmov ax,dsegmov ds,axbegin: mov ax,amov bx,bxor ax,bxtest ax,0001jz classtest bx,0001jz exitxchg bx,amov b,bxjmp exitclass: test bx,0001jz exitinc binc aexit: retmain endpcseg endsend start5、把0~10010之间的30个数,存入首地址为GRAD的字数组中,GRAD+i表示学号为i+1的学生成绩.另一个数组RANK是30个学生的名次表,其中RANK+I 的内容是学号为i+1的学生的名次.试编写程序,根据GRAD中的学生成绩,将排列的名次填入RANK数组中(提示:一个学生的名次等于成绩高于这个学生的人数加1).答案:dseg segmentgrade dw 30 dup( )rank dw 30 dup( )dseg endscseg segmentmain proc farassume cs:cseg,ds:dseg,es:dsegstart: push dssub ax,axpush axmov ax,dsegmov ds,axmov es,axbegin: mov di,0mov cx,30loop1: push cxmov cx,30mov si,0mov ax,grade[di]mov dx,0loop2: cmp grade[si],axjbe go_oninc dxgo_on: add si,2loop loop2pop cxinc dxmov rank[di],dxsdd di,2loop loop1retmain endpcseg endsend start6、分析下列程序的功能,写出堆栈最满时各单元的地址及内容. SSEG SEGMENT 'STACK' AT 1000H ; 堆栈的段地址为1000H DW 128 DUP( )TOS LABEL WORDSSEG ENDS; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DSEG SEGMENTDW 32 DUP( )DSEG ENDS; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CSEG SEGMENTMAIN PROC FARASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART: MOV AX,SSEGMOV SS,AXMOV AX,DSEGMOV DS,AXMOV AX,4321HCALL HTOARETN: MOV AH,4CHINT 21HMAIN ENDP; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HTOA PROC NEARCMP AX,15JLE B1PUSH AXPUSH BPMOV BP,SPMOV BX,[BP+2]AND BX,0FHMOV [BP+2],BXPOP BPMOV CL,4SHR AX,CLCALL HTOAB1: POP AXB2: ADD AL,30HJL PRTADD AL,07PRT: MOV DL,ALMOV AH,2INT 21HRETHTOA ENDPCSEG ENDS; ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - END START答案:1000:0F2HB11000:0F4H31000:0F6HB11000:0F8H21000:0FAHB11000:0FCH1RETN1000:100H7、写出分配给下列中断类型号在中断向量表中的物理地址.(1) INT 12H (2) INT 8答案:(1) 00048h(2) 00020h8、试编写程序,它轮流测试两个设备的状态寄存器,只要一个状态寄存器的第0位为1,则与其相应的设备就输入一个字符;如果其中任一状态寄存器的第3位为1,则整个输入过程结束.两个状态寄存器的端口地址分别是0024和0036,与其相应的数据输入寄存器的端口则为0026和0038,输入字符分别存入首地址为BUFF1和BUFF2的存储区中.答案:mov si,0mov di,0test12: in al,0024htest al,08jnz exitin al,0036htest al,08jnz exitdev1: in al,0024htest al,01jz dev2in al,0026hmov buffer[si],alinc sidev2: in al,0036htest al,01jz test12in al,0038hmov buff2[di],alinc dijmp test12exit: ret9、给定(SP)=0100,(SS)=0300,(FLAGS)=0240,存储单元的内容为(00020)=0040,(00022)=0100,在段地址为0900及偏移地址为00A0的单元中有一条中断指令INT 8,试问执行INT 8指令后,SP,SS,IP,FLAGS的内容是什么栈顶的三个字是什么答案:(SS) = 0300(IP) = 0040(FLAGS) = 0040堆栈内容:00A1H0900H0240H10、编写一个程序,接收从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用XLAT指令变换)存入内存缓冲区BUFFER.加密表为;输入数字: 0,1,2,3,4,5,6,7,8,9密码数字: 7,5,9,1,3,6,8,0,2,4答案:scode db 7,5,9,1,3,6,8,0,2,4buffer db 10 dup( ); ……mov si,0mov cx,10lea bx,scodeinput: mov ah,01int 21hcmp al,0ahjz exitand al,0fhxlatmov buffer[si],alinc siloop inputexit: ret。