汇编语言程序设计(合工大版)习题参考答案.pdf

上传人:赵** 文档编号:69173924 上传时间:2022-12-31 格式:PDF 页数:36 大小:813.61KB
返回 下载 相关 举报
汇编语言程序设计(合工大版)习题参考答案.pdf_第1页
第1页 / 共36页
汇编语言程序设计(合工大版)习题参考答案.pdf_第2页
第2页 / 共36页
点击查看更多>>
资源描述

《汇编语言程序设计(合工大版)习题参考答案.pdf》由会员分享,可在线阅读,更多相关《汇编语言程序设计(合工大版)习题参考答案.pdf(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!4 部份习题参考答案 以下各数均为十进制数,请采纳 8 位二进制补码运算,并回答标志寄放器 FLAGS 中 CF 和 OF 的值,运算结果所代表的十进制数是多少?若是用 16 位二进制补码运算,其结果所代表的十进制数是多少?FLAGS 中 CF 和 OF 的值呢?(1)85+69 (2)85+(-69)(3)85-(-69)(4)85-(69)85=55H,69=45H,-69=BBH,8 位二进制补码运算:(1)85+69=55H+45H=9AH,CF=0,OF=1 (2)85+(-69)=55H+

2、BBH=110H,CF=1,OF=0 其余略 实模式下,写出段地址和偏移地址为 1234:200 二、1430:004 二、FF00:0FFF的物理地址。1234:2002=12340+2002=14342 1430:0042=14300+0042=14342 FF00:0FFF=FF000+0FFF=FFFFF 已知 8086 系统某存储单元物理地址为:52506H,你以为段基址的最大值、最小值别离是多少?8086 微机最多能够有多少个不同的段基址?52506=5250:0006,段基址的最大值=5250 52506=4251:FFF6,段基址的最小值=4251 从物理地址为 00100H

3、开始到 00103H 单元中顺序寄存的数据为:12H,34H,56H,78H。请画出数据寄存示用意,并回答以下问题:欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!(1)写出 00101H 字节单元的内容(00101)=34H(2)写出 00102H 字单元的内容(00102)=7856H 习题 3 别离说明 8086 处置器中各寄放器的名称和作用是什么?溢出标志 OF 与进位标志 CF 有何作用和区别?何为段地址?何为有效地址?何为物理地址?用指令举例说明。带符号数比较大小,当 AX BX 时程序转向标号 L1,假设前导指令为 CMP AX,BX

4、 后续指令应什么缘故?假设视为二个无符号数比较大小,后续指令应什么缘故?带符号数:JL L1,无符号数:JB L1 ADD 指令和 ADC 指令在什么情形下是一样的结果?CF=0 说出 CALL 指令和 INT 21H 指令的操作,有何异同?CALL 把断点压入堆栈,不必然是远调,INT 21H 还要把 FLAGS 压入堆栈,且是远调,总入口地址为 84H 内存中的两个字。除用 4CH 号系统功能挪用终止程序的执行并退出,还有哪些方法?RET 指令,INT 20H 指出以下错误的指令,说犯错误缘故,并给出适合的修改。(1)MOV AX,DX /MOV AX,BX (2)MOV DS,DATA

5、/MOV DS,BX 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!(3)MOV CS,AX /MOV ES,AX(4)MOV AX,DL /MOV AL,DL(5)PUSH AL /PUSH AX(6)ADD BX,DI /ADD BX,DI(7)LEA BX,2000H /LEA BX,2000H (8)MOV BX,OFFSET 2000H (9)MOV SI,2 /MOV BYTE PTR SI,2(10)MUL BX,CX /MUL BX(11)DIV 5 /DIV BX(12)MOV BYTESI,2 /MOV BYTE PTR SI

6、,2(13)MOV AX,SI+DI /MOV AX,BX+SI(14)SHR AX,4 /SHR AX,1(15)CMP 6,AX /CMP AX,6(16)MOV FFFF,AX /MOV FFFE,AX(17)MOV AX,BX+4 /MOV AX,BX+4(18)JMP FAR PRO /JMP FAR PTR PRO 假定(DS)=1200H,(SS)=4400H,(BX)=463DH,(BP)=2006H,(SI)=6A00H,位移量 D=4524H,以 AX 寄放器为目的操作数,试写出以下各类寻址方式下的传送指令,并确信源操作数的有效地址EA 和物理地址。(1)当即寻址 ;操作数

7、的 EA 确实是指令的 EA/操作数在指令中/无 EA (2)直接寻址 ;EA=4524H,物理地址=DS:4524 (3)利用 BX 的寄放器寻址;无 EA (4)利用 BX 的间接寻址 ;EA=463DH,物理地址=DS:463D (5)利用 BP 的寄放器相对寻址;MOV AX,BP+4524,EA=2006+4524,物理地址=SS:EA (6)基址变址寻址;MOV AX,BX+SI,EA=BX+SI,物理地址=DS:EA (7)相对基址变址寻址;MOV AX,4524+BX+SI,EA=4524+BX+SI,物理地址=DS:EA 用一条指令完成以下操作。(1)把 BX 寄放器和 DX

8、 寄放器的内容相加,结果存人 DX 寄放器中。ADD DX,BX(2)用寄放器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄放器的内容相加,并把结果送到 AL 寄放器中。ADD AL,BX+SI(3)用寄放器 BX 和位移量 0B2H 的寄放器相对寻址方式把存储器中的一个字和 AX 寄放器的内容互换。XCHG AX,BX+0B2(4)用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回该存储单元中。ADD WORD PTR 524,2A59H 在数据段概念了 ARRAY 数组,其中依次存储了五个字数据,请用以下寻址方式的指令把第 4 个字送 AX 寄放

9、器。(1)直接寻址 MOV AX,ARRAY+6 或 MOV AX,ARRAY+6 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!(2)利用 BX 的间接寻址 LEA BX,ARRAY+6;MOV AX,BX (3)利用 BX 的寄放器相对寻址 LEA BX,ARRAY ;MOV AX,BX+6(4)基址变址寻址 LEA BX,ARRAY;MOV SI,6;MOV AX,BX+SI 画出数据在数据段中的寄存情形,程序执行后,BX、DI、CX、DX 寄放器中的内容是什么?程序如下:data segment array dw 20,30,40,20h

10、,30h,-6 buff db abcd$data ends code segment assume cs:code,ds:data start:mov ax,data mov ds,ax mov bx,array+1 mov di,offset array mov cx,di+5 mov dl,buff+3 mov ah,4ch int 21h code ends end start 1E,00,00,00,20,00,00,64 在 DEBUG 下设置(SP)=20H,设置 AX、BX、CX、DX 为不同值,把这四个寄放器内容依次压入堆栈,再从堆栈中依次弹出到 SI、DI、BP、BX 寄放

11、器。写出一段程序实现上述操作,并画出每条入栈指令执行后 SP 和堆栈中数据的转变。求出 7450H 与以下各十六进制数的和及差,并依照结果标出 SF、ZF、CF、OF 标志位的值。(1)1234H (2)5678H (3)9804H (4)E0A0H SF、ZF、CF、OF(1)1234H+7450H,1 0 0 1(2)5678H+7450H,1 0 0 1(3)9804H+7450H,0 0 1 0(4)E0A0H+7450H,0 0 1 0 在数据段有如下概念:DATAX DW?,?DATAY DW?,?SUM DW?,?,?,?请用 16 位指令按以下要求写出指令序列:欢迎您阅读并下载

12、本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!(1)DATAX 和 DATAY 两个字数据相加,和寄存在 SUM 中。MOV AX,DATAX ADD AX,DATAY MOV SUM AX (2)DATAX 和 DATAY 两个双字数据相加,和寄存在 SUM 开始的字单元中。MOV AX,DATAX MOV DX,DATAX+2 ADD AX,DATAY ADC DX,DATAY+2 MOV SUM,AX MOV SUM+2,DX(3)DATAX 和 DATAY 两个字数据相乘(用 MUL),积寄存在 SUM 开始的字单元中。(4)DATAX 和 DATAY

13、两个双字数据相乘(用 MUL),积寄存在 SUM 开始的字单元中。(5)DATAX 双字除以字 DATAY(用 DIV),商和余数寄存在 SUM 开始的字单元中。(6)DATAX 和 DATAY 两个紧缩 BCD 码数据相加,和寄存在 SUM 中。双字长数 X 寄存在 DX 和 AX 中,设(DX)=1004H,(AX)=1002H,要求用 16位指令写出:(1)对寄存在 DX 和 AX 中的双字长数求补的指令序列,并验证结果。NOT AX NOT DX ADD AX,1 ADC DX,0 (2)用减法指令求 0-X 的指令序列,并验证结果。MOV BX,0 MOV CX,0 SUB BX,A

14、X SBB CX,DX ;结果在 CX,BX 试编写一个程序求出双字长数的绝对值。双字长数在 A 开始的字单元中,结果寄存在 B 开始的字单元中。A DW?,?B DW?,?。MOV AX,A MOV DX,A+2 TEST DX,8000H JZ ZS NOT AX NOT DX ADD AX,1 ADC DX,0 ZS:MOV B,AX 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!MOV B+2,DX 用移位指令为主实现对 AX 中的无符号数乘以 5,不考虑乘积可能超出 16位。MOV DX,AX MOV CL,2 SHL AX,CL AD

15、D AX,DX 用移位指令为主实现对 AX 中的无符号数乘以 5,考虑乘积可能超出 16 位的情形。提示:用 DX 接 AX 左移的位,32 位操作。把 AX 中的内容依次倒排序,即第 0 位移到第 15 位,第 1 位移到第 14 位,。在数据段有如下概念:BUFF DB ABCD$EFGHIJK$STR1 DB 12 DUP(?)LEN DB?用串指令编写程序完成以下操作:(1)对字符串 STR1 全数置空格符。MOV AX,DATA MOV DS,AX MOV AL,20H LEA DI,STR1 MOV CX,STR1-BUFF CLD REP STOSB (2)从左到右把 BUFF

16、中的字符串传送到 STR1。MOV AX,DATA MOV DS,AX MOV ES,AX CLD LEA SI,BUFF LEA DI,STR1 MOV CX,STR1-BUFF REP MOVSB(3)从右到左把 BUFF 中的字符串传送到 STR1。MOV AX,DATA MOV DS,AX MOV ES,AX STD LEA SI,STR1-1 LEA DI,LEN-1 MOV CX,STR1-BUFF REP MOVSB 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!(4)比较 BUFF 与 STR1 两个字符串是不是相等,如相等那么

17、DX=1,不然 DX=0。MOV AX,DATA MOV DS,AX MOV ES,AX CLD LEA SI,BUFF LEA DI,STR1 MOV CX,STR1-BUFF REPE CMPSB (5)查找 BUFF 中有无字符$,把字符$显现的次数计入 BX 寄放器。MOV AX,DATA MOV ES,AX MOV BX,0 CLD MOV AL,$LEA SI,BUFF MOV CX,STR1-BUFF NEXT:REPNE SCASB JCXZ NO-FOUND INC BX JMP NEXT 关于给定的 AX 和 BX 的值,执行以下程序段,程序将转向哪里?ADD AX,BX

18、JNO L1 JNC L2 SUB AX,BX JNC L3 JNO L4 JMP L5(1)AX=1234H,BX=6789H(2)AX=9200H,BX=4000H(3)AX=420EH,BX=8031H(4)AX=E002H,BX=8086H L1,L1,L1,L5 下面不完整的程序段是比较 AX 和 BX 的值,把其中大的数送 MAX 变量。若是是无符号数,应如何填写指令?若是是有符号数,应如何填写指令?CMP AX,BX(JB L1 )有符号数:JL L1 MOV MAX,AX(JMP L2 )L1:MOV MAX,BX L2:HLT 欢迎您阅读并下载本文档,本文档来源于互联网,如有

19、侵权请联系删除!我们将竭诚为您提供优质的文档!在以下程序段的括号中别离填入如下指令,程序执行完后,AX、CX 的内容是什么?(1)LOOP(2)LOOPE(3)LOOPNZ MOV AX,8 MOV CX,5 L1:SHL AX,CL()提示:上机,SHL 指令使 ZF=0,LOOPE 指令不可能循环。测试 AL 寄放器,若是最高位和最低位同时为 0,那么转 L0,若是最高位和最低位只有一名为 1,那么转 L1,若是最高位和最低位同时为 1,那么转 L2。画出流程图,并编写程序段。ROL AL,1 AND AL,3 JZ L0 SUB AL,3 JZ L3 JMP L2 从键盘输入一个英文字母

20、,显示输出其大写。画出流程图,并编写程序段。从键盘输入一名数字N,显示输出 N 个 N。画出流程图,并编写程序段。CODE SEGMENT ASSUME CS:CODE START:MOV AH,1 INT 21H MOV DL,AL AND AL,0FH MOV CL,AL MOV CH,0 NEXT:MOV AH,2 INT 21H LOOP NEXT MOV 4CH INT 21H CODE ENDS END START 寄放器中为紧缩的BCD 码表示的十进制数,写出指令完成十进制加减计算,即计算 AL+BL;AL-BL。并在 DEBUG 下上机验证。(1)AL=65H,BL=37H (

21、2)AL=98H,BL=69H 寄放器中为非紧缩的 BCD 码表示的十进制数,写出指令完成十进制加减计算,即计算 AL+BL;AL-BL。并在 DEBUG 下上机验证。(1)AX=235H,BL=37H (2)AL=238H,BL=39H 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!用相对基址比例变址寻址方式求 ARRAY 行列式的值。ARRAY DW 2,3,5 DW 1,4,6 DW 2,7,9 习题 4 假设 VAR1 为字节变量,VAR2 为字变量,LAB 为标号,VAL 为常量,指出以下有错误的指令,说出缘故,并予纠正。(1)ADD

22、AX,VAR1 /ADD AL,VAR1(2)MOV VAR2,VAR1 /MOV VAR2,AX(3)MOV VAR1,BYTE PTR VAR2 /MOV VAR1,AL(4)MOV VAR1,OFFSET VAR2 /MOV VAR2,OFFSET VAR1(5)MOV VAR2,OFFSET VAR1 (6)MOV VAR1,VAR2+VAR1 /MOV VAR2,VAR2-VAR1(7)MOV VAR1,VAR2-VAR1 /MOV VAR2,VAR2-VAR1(8)MOV VAR2,VAR2-VAR1(9)MOV BX,VAR2+VAL-4*5 (10)MOV BX,TYPE VA

23、L (11)MOV BX,LAB(12)JMP VAR1 /JMP WORD PTR VAR1(13)JMP VAR2(14)JMP VAL /仅在 DEBUG 下能够(15)MOV BL,VAR1 AND VAL /VAR1 AND VAL 须用指令实现(16)MOV BX,VAL AND 0FH(17)MOV BX,VAL LT 0FH(18)MOV BL,LAB+VAR1 /MOV BL,VAR1 画图说明以下数据概念语句所示内存空间的数据,并回答寄放器的值。ORG 0 ARRAY LABEL BYTE DA1 DW 2,9,14,3,315H,-6 DA2 DB 7,ABCDEDFG

24、LEN=$DA2 ORG 100H DA3 DW DA4 DA4 DB 4 DUP(2 DUP(1,2,3),4)MOV AL,ARRAY+2 (AL)=()H ADD AL,DA2+1 (AL)=()H MOV AX,DA2-DA1 (AX)=()H MOV BL,LEN (BL)=()H MOV AX,DA3 (AX)=()H MOV BX,TYPE DA4 (BX)=()H MOV BX,OFFSET DA4 (BX)=()H MOV CX,SIZE DA4 (CX)=()H MOV DX,LENGTH DA4 (DX)=()H MOV BX,WORD PTR DA4 (BX)=()H

25、欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!MOV BL,LEN AND 0FH (BL)=()H MOV BL,LEN GT 5 (BL)=()H MOV AX,LEN MOD 5 (AX)=()H 变量和标号有哪些区别?变量和标号有哪些属性?如何获取属性值?写出指令。变量是为指令提供的操作数,标号是为指令提供标识,都是为了在指令中引用。它们最要紧的属性有:偏移属性,段属性,类型属性。例如:MOV BX,OFFSET VAL;取偏移属性 MOV BX,SEG VAL ;取段属性 MOV BX,TYPE VAL ;取类型属性 指令和伪指令的区别

26、在哪里?伪指令能够出此刻代码段吗?指令能够在数据段吗?指令只能出此刻代码段,概念数据的伪指令通常在数据段。伪指令可不能生成指令。下面的程序是不是有错?可否通过汇编?程序运行的结果如何?程序的真正用意是什么?应如何修改程序才能实现真正用意?答:通过汇编和连接能够运行,但程序真正用意是输出 ASCII 码为 30H39H 的字符 09,应作修改。CODE SEGMENT ASSUME CS:CODE K=30H ;改成 K DB 30H J DW 0 START:MOV DL,K MOV AH,2 INT 21H K=K+1 ;K=K+1 是伪指令,没生成代码,改成 INC K INC J CMP

27、 J,10 JNZ START MOV AH,4CH INT 21H CODE ENDS END START 用 32 位指令编写完整程序,并上机调试,计算 V=(X+Y)*R,其中所有变量均为 64 位变量,X、Y、R 的具体数值由你自己确信,变量概念格式如下:X DD?,?Y DD?,?R DD?,?V DD?,?data segment 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!x dd 1 y dd 2 r dd 3 v dd?,?data ends code segment assume cs:code,ds:data.386p s

28、tart:mov ax,data mov ds,ax mov eax,x add eax,y mov ebx,r imul ebx mov v,eax mov v+4,edx mov dl,al add dl,30h mov ah,2 int 21h mov ah,4ch int 21h code ends end start 习题 5 以下程序是在 3 个数中找出最小的数并放入 AL,在括号中填入指令使其完整。mov al,x mov bl,y mov cl,z cmp al,bl (jl l1 )xchg al,bl l1:cmp al,cl jle l2(xchg al,cl )l2:r

29、et 数据段如下:data segment da1 db 1,2,abcd count =$-da1 da2 db 9 dup(?)data ends 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!补充括号处的指令,使得程序把 DA1 数据区数据移到 DA2 数据区。mov ax,data mov ds,ax mov es,(AX )mov cx,(COUNT )mov si,(OFFSET DA1 )(MOV DI,OFFSET DA2 )(REP MOVSB )以下程序对无符号数组 ARRAY 的 6 个元素从小到大排序,补充括号处的指令。d

30、ata segment array dw 4,3,12,56,5,8 data ends code segment assume cs:code,ds:data start:(mov ax,data )(mov ds,data )mov cx,5 l1:mov di,cx mov bx,0 l2:mov ax,arraybx cmp ax,arraybx+2(jl l3 )xchg ax,arraybx+2 mov arraybx,ax l3:add bx,2(loop l2 )mov cx,di loop l1 mov ah,4ch int 21h code segment end star

31、t 编写程序,实现从键盘输入的小写字母用大写字母显示出来。对输入须合法性检查。code segment assume cs:code start:push ds sub ax,ax push ax mov ah,1 int 21h cmp al,61h 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!jb exit cmp al,7ah ja exit sub al,20h mov dl,al mov ah,2 int 21h exit:ret code ends end start 编写程序,比较两个字符串是不是相同,若是相同,那么显示两个字符串

32、,若是不同,那么显示发觉不同的字符位置。datasg segment mess1 db 13,10,input string1:$mess2 db 13,10,input string2:$mess3 db 13,10,match!$mess4 db 13,10,no match at$st1 label byte max1 db 6 act1 db?stok1 db 6 dup(?)st2 label byte max2 db 6 act2 db?stok2 db 6 dup(?)datasg ends codesg segment assume cs:codesg,ds:datasg,es

33、:datasg main proc far push ds sub ax,ax push ax mov ax,datasg mov ds,ax mov es,ax lea dx,mess1 mov ah,09 int 21h ;qust1?lea dx,st1 mov ah,0ah int 21h ;ans1 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!lea dx,mess2 mov ah,09 int 21h ;qust2?lea dx,st2 mov ah,0ah int 21h ;ans2 mov cl,act1 mov dl,act2

34、 cmp cl,dl jnz nomatch lea si,stok1 lea di,stok2 inc cl repe cmpsb cmp cl,0 jz match nomatch:lea dx,mess4 jmp exit match:lea dx,mess3 exit:mov ah,09 int 21h sub di,offset stok2 mov dx,di and dx,0fh add dl,30h mov ah,2 int 21h ret main endp codesg ends end main 编写程序,从键盘输入一个个位数 N,响铃 N 次(响铃 ASCII 码为 07

35、H)。code segment assume cs:code start:push ds sub ax,ax push ax mov ah,1 int 21h 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!cmp al,31h jb exit cmp al,39h ja exit sub al,30h mov cl,al mov ch,0 k:mov ah,2 mov dl,7 int 21h loop k exit:ret code ends end start 编写程序,从键盘输入一个字符串到 BUFF,再输入一个字符到 AL,在字符串 BU

36、FF 中查找是不是存在该字符,若是找到,显示发觉的字符位置。;search datasg segment paradata mess1 db 13,10,input string:$mess2 db 13,10,input a char:$mess3 db 13,10,found at$mess4 db 13,10,no found!$st1 label byte max1 db 6 act1 db?stok1 db 6 dup(?)datasg ends codesg segment paracode assume cs:codesg,ds:datasg,es:datasg main pro

37、c far push ds sub ax,ax push ax mov ax,datasg mov ds,ax mov es,ax lea dx,mess1 mov ah,09 int 21h ;qust1?lea dx,st1 mov ah,0ah 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!int 21h ;ans1 lea dx,mess2 mov ah,09 int 21h ;qust2?mov ah,1 int 21h ;ans2 lea di,stok1 repne scasb jz match nomatch:lea dx,mes

38、s4 jmp exit match:lea dx,mess3 exit:mov ah,09 int 21h sub di,offset stok1 mov dx,di and dx,0fh add dl,30h mov ah,2 int 21h ret main endp codesg ends end main 编写程序,从键盘输入一个 N 位二进制数,统计 1 显现的次数。code segment assume cs:code start:mov cx,9 ;N10 mov dl,30H next:mov ah,1 int 21h cmp al,13 jz write cmp al,30h

39、 jb exit cmp al,31h ja exit sub al,30h add dl,al 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!dec cx jnz next write:push dx mov dl,10 mov ah,2 int 21h pop dx mov ah,2 int 21h exit:mov ah,4ch int 21h code ends end start 编写程序,从键盘输入一个字符串到 BUFF,并按相反顺序显示输出。datasg segment mess1 db 13,10,input string:$me

40、ss2 db 13,10,$st1 label byte max1 db 6 act1 db?stok1 db 6 dup(?)datasg ends codesg segment assume cs:codesg,ds:datasg main proc far push ds sub ax,ax push ax mov ax,datasg mov ds,ax lea dx,mess1 mov ah,09 int 21h lea dx,st1 mov ah,0ah int 21h lea dx,mess2 mov ah,09 int 21h mov cl,act1 欢迎您阅读并下载本文档,本文

41、档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!mov ch,0 mov bx,offset stok1 add bx,cx next:dec bx mov dl,bx mov ah,2 int 21h loop next ret main endp codesg ends end main 编写程序,从键盘输入一个八位的二进制数,显示其十六进制数。code segment assume cs:code start:mov cx,8 mov bl,0 next:mov ah,1 int 21h cmp al,30h jb exit cmp al,31h ja exit sub

42、 al,30h shl bl,1 add bl,al loop next mov cl,4 mov di,2 out1:rol bl,cl mov dl,bl and dl,0fh add dl,30h cmp dl,39h jle dig add dl,7 dig:mov ah,2 int 21h dec di cmp di,0 jnz out1 exit:mov ah,4ch int 21h 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!code ends end start 编写程序,从键盘输入某个字符的 ASCII 码(作为起点)和个数

43、N,显示输出这 N个 ASCII 码和字符。字数组 ARRAY 为有符号数,第一个单元为元素个数 N,后面为 N 个元素,编写程序,求数组元素中的最大值,并把它放入 MAX 单元。data segment array dw 5,9,4,5,15,3 max dw?data ends code segment assume cs:code,ds:data start:mov ax,data mov ds,ax mov cx,array lea bx,array+1 mov ax,bx mov max,ax k1:mov ax,bx cmp ax,max jl next mov max,ax ne

44、xt:add bx,2 loop k1 mov ah,4ch int 21h code ends end start 字数组 ARRAY,第一个单元为元素个数 N,后面为 N 个元素,编写程序,把零元素从数组中清除,移动元素位置并修改第一个单元(元素个数)。;delete the 0 from array data segment array dw 6,3,4,0,15,0,7 loca dw 999 ;此单元地址为终止标记 data ends code segment assume cs:code,ds:data start:mov ax,data mov ds,ax 欢迎您阅读并下载本文档

45、,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!mov cx,array lea bx,array+1 next:cmp word ptrbx,0 jz move add bx,2 dec cx cmp cx,0 jnz next jmp exit move:dec array mov di,bx mnext:cmp di,offset loca ja next mov ax,di+2 mov di,ax add di,2 cmp di,offset loca jnb next jmp mnext exit:mov ah,4ch int 21h code ends en

46、d start 下表为奥运会获金牌前十名国家的成绩统计表,请编写程序,统计并填写表中的合计栏数据。;先逐行求小计,再按列求合计。data segment array db 1,0,1,?;设简单数据 db 1,1,0,?欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!db 1,1,0,?db 1,1,1,?db 1,1,1,?db 1,1,1,?db 1,1,1,?db 1,1,1,?db 1,1,1,?db 1,1,1,?org 30h sumvd db?,?,?,?;寄存按列求的合计数 org 40h loca dw?;寄存array的第一行地

47、址 data ends code segment assume cs:code,ds:data start:mov ax,data mov ds,ax mov ax,0 mov cx,10 lea bx,array sumh:mov di,3 sum3:add al,bx inc bx dec di jnz sum3 mov bx,al ;寄存行的小计 mov ax,0 inc bx loop sumh;下面按列求合计 lea bx,array mov loca,bx lea si,sumvd mov cx,10 mov di,4 sumv3:mov ax,0 mov bx,loca sumv

48、:add al,bx add bx,4 loop sumv mov si,al mov cx,10 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!inc si inc loca dec di jnz sumv3 exit:mov ah,4ch int 21h code ends end start 进程概念如下,补充括号中的指令。code segment assume cs:code main proc far(PUSH DS )(XOR AX,AX )(PUSH AX )ret main endp code ends end main 补充以下

49、程序括号中的指令,使得程序对堆栈的操作全数利用程序中概念的TOS堆栈,并画出程序执行后堆栈TOS中的数据。data segment dw 100 dup(?)tos label word data ends code segment assume cs:code,ss:data main proc far(MOV AX,DATA )(MOV SS,AX )(LEA SP,TOS )push ds xor ax,ax push ax call far ptr suba ;假定此处指令的地址为 cs=3400h,ip=30h code ends end main 欢迎您阅读并下载本文档,本文档来源

50、于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!以下两个独立程序模块,相互用到对方的变量和标号,你以为哪个是主模块?程序有无错误?应该如何修改?答:是主模块,因为它有 call m2,但没有说明外部符号,而 m2 必需是进程名,var4,lab2 也没有说明外部符号。var1,var2 没有说明为 PUBLIC。应加上:EXTRN m2:FAR,var4:WORD PUBLIC var1,var2,lab1 并修改 data segment 为 data segment PUBLIC 同理应加上:EXTRN var1:byte,var2:word extrn lab1:FAR PU

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁