微机原理黄冰版--作业答案_第1页
微机原理黄冰版--作业答案_第2页
微机原理黄冰版--作业答案_第3页
微机原理黄冰版--作业答案_第4页
微机原理黄冰版--作业答案_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1章 绪论1.2 用8位二进制码,写出下列十进制数的原码和补码表示解释:原码:最高位为符号位,正数符号位为0,负数符号位为1。补码:正数的补码与原码相同;负数的补码:由其原码除符号位保持不变外,其余各位按位取反,末位加1而成。解:(1) +65原 = 0100 0001B 注:65 = 64 + 1 +65补 = +65原 = 0100 0001B 注:正数补码与原码相同(2) +115原 = 0111 0011B 注:115 = 64 + 32 + 16 + 2 + 1 +115补 = +115原 = 0111 0011B 注:正数补码与原码相同(3) -65原 = 1100 0001B 注

2、:65 = 64 + 1 -65补 = 1011 1110B + 1B = 1011 1111B 注:除符号位外,按位取反,末位加1(4) -115原 = 1111 0011B 注:115 = 64 + 32 + 16 + 2 + 1 -115补 = 1000 1100B + 1B = 1000 1101B 注:除符号位外,按位取反,末位加11.3 用16位二进制码,写出下列十进制数的原码和补码表示。(1) +120原 = 0000 0000 0111 1000B 注:120 = 64 + 32 + 16 + 8 +120补 = +120原 = 0000 0000 0111 1000B 注:正

3、数补码与原码相同(2) -120原 = 1000 0000 0111 1000B 注:120 = 64 + 32 + 16 + 8 -120补 = 1111 1111 1000 0111B + 1B = 1111 1111 1000 1000B 注:除符号位外,按位取反,末位加1(3) +230原 = 0000 0000 1110 0110B 注:230 = 128 + 64 + 32 + 4 + 2 +230补 = 0000 0000 1110 0110B 注:正数补码与原码相同(4) -230原 = 1000 0000 1110 0110B 注:230 = 128 + 64 + 32 +

4、4 + 2 -230补 = 1111 1111 0001 1001B + 1B = 1111 1111 0001 1010B 注:除符号位外,按位取反,末位加11.4 写出下列用补码表示的二进制数的真值。解释:正数的补码 = 原码负数的补码:再次求补码得到其原码解:(1) 0011 0111 正数的补码 真值:32 + 16 + 4 + 2 + 1 = +55(2) 0101 1001 正数的补码 真值:64 + 16 + 8 + 1 = +89(3) 1000 1101 负数的补码 真值:1111 0010B + 1B = 1111 0011B = -115(4) 1111 1001 负数的

5、补码 真值:1000 0110B + 1B = 1000 0111B = -7第2章 Intel 8086微处理器2.2 在存储器中存放的数据如图所示。试读出75422H和75424H字节单元的内容是什么?读出75422H和75424H字单元的内容是什么?存储器7542 0H13H1H78H2H9CH3H24H4H5DH5HE6H解:75422H字节单元的内容:9CH75424H字节单元的内容:5DH75422H字单元的内容:249CH75424H字单元的内容:0E65DH2.3 段地址和偏移地址为1000H:117AH的存储单元的物理地址是什么?而1109H:00EAH或1025H:0F2A

6、H的存储单元的物理地址又是什么?这说明了什么问题?解释:物理地址 = 段地址 × 10H + 偏移地址解:1000H : 117AH存储单元的物理地址1000H × 10H + 117AH = 1117AH1109H : 00EAH存储单元的物理地址1109H × 10H + 00EAH = 1117AH1025H : 0F2AH存储单元的物理地址1025H × 10H + 0F2AH = 1117AH说明:不同的段地址不同的偏移地址可以指向同一个物理地址,即各个逻辑段可以相互重叠。2.4 在存储器分段结构中,每个段区最大可占用多少地址范围,为什么?如果

7、在8086的机器中,若段间不允许重叠,那么最多可分多少个段区?解:若为8086微处理器,每个段区最大可占用64KB,因为所有内部寄存器都只有16位。若每段64KB,最多可分16个段区,因为8086微处理器有20条地址线,可访问存储器的最大容量为1MB。2.5 如果从存储器的2000H地址开始分配段区,要求数据段占用1KB范围,堆栈段占用512B范围,代码段占用8KB范围。按数据段、堆栈段和代码段的顺序连续存放,试画出存储器分段地址分配示意图,图中应写明各段寄存器的内容?解:02000H1KBDS:020002400H512BSS:0240H02600H8KBCS:0260H注:1KB:00 0

8、000 0000B11 1111 1111BSS:起始物理地址2000H + 1KB = 2000H + 400H = 02400H512B:0 0000 0000B1 1111 1111BCS:起始物理地址2400H + 512B = 2400H + 200H = 02600H2.6 指出下列指令的源和目标操作数的寻址方式:题号指令目的操作数的寻址方式源操作数的寻址方式(1)MOV ARRAY,BX直接寻址寄存器寻址(2)ADC CX,ALPHABXSI寄存器寻址带位移的基址变址寻址(3)AND GAMMADI,11011000B带位移的变址寻址立即寻址(4)INC BL寄存器寻址(5)TE

9、ST ES:SI,DX寄存器间接寻址寄存器寻址(6)SBB SI,BP寄存器寻址寄存器间接寻址2.7 现有DS=2000H,BX=0100H,SI=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=B7H,(21203H)=65H,试说明下列各指令执行完后AX寄存器的内容。题号指令AX寄存器的内容简单解释(1)MOV AX,1200H1200H立即数赋给AX(2)MOV AX,BX0100H寄存器BX值赋给AX(3)MOV AX,1200H4C2AHPA=DS

10、×16+1200H=21200H(4)MOV AX,BX3412HPA=DS×16+BX=20100H(5)MOV AX,1100HBX4C2AHPA=DS×16+BX+1100H=21200H(6)MOV AX,BXSI7856HPA=DS×16+BX+SI=20102H(7)MOV AX,1100HBXSI65B7HPA=DS×16+BX+SI+1100H=21202H2.8 假定DS=2000H,ES=2100H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H,数据段中变量名VAL的偏移地址值为0050H,试指出下

11、面源操作数字段的寻址方式是什么?其物理地址值是多少?题号指令源操作数的寻址方式源操作数的物理地址(1)MOV AX, 00ABH立即寻址在代码段中,与CS、IP有关(2)MOV AX,BX寄存器寻址在寄存器中(3)MOV AX,100H直接寻址DS×16+100H=20100H(4)MOV AX,BX寄存器间接寻址DS×16+BX=20100H(5)MOV AX,BP寄存器间接寻址SS×16+BP =15010H(6)MOV AX,BX+10带位移的基址寻址DS×16+BX +10=2010AH(7)MOV AX,BXSI基址变址寻址DS×16

12、+BX +SI=201A0H(8)MOV AX,VAL直接寻址DS×16+VAL=20050H(9)MOV AX,ES:BX寄存器间接寻址ES×16+BX=21100H(10)MOV AX,SI寄存器间接寻址DS×16+SI=200A0H(11)MOV AX,VALBX带位移的基址寻址DS×16+BX+VAL=20150H(12)MOV AX,VALBXSI带位移的基址变址寻址DS×16+BX+SI+VAL=201F0H2.9 设AX=1122H,BX=3344H,CX=5566H,SP=2000H,试分析下列程序段执行后,AX、BX、CX、S

13、P中的内容各为多少?并画出堆栈变化示意图。解:第1条指令AX=1122HPUSH AXBX=3344HSP22HCX=5566H11HSP=1FFEH第2条指令PUSH BXSP44HAX=1122H33HBX=3344H22HCX=5566H11HSP=1FFCH第3条指令PUSH CXSP66H55H44HAX=1122H33HBX=3344H22HCX=5566H11HSP=1FFAH第4条指令POP AXSP44HAX=5566H33HBX=3344H22HCX=5566H11HSP=1FFCH第5条指令AX=5566HPOP CXBX=3344HSP22HCX=3344H11HSP=

14、1FFEH2.10 下列程序段中每一条指令执行完后,AX中的十六位进制内容是什么?指令AX中的内容指令MOV AX,0AX=0000HDEC AXAX=0FFFFHADD AX,7FFFFHAX=7FFEHADD AX,2AX=8000HNOT AXAX=7FFFHSUB AX,0FFFFHAX=8000HADD AX,8000HAX=0000HOR AX,0BFDFHAX=0BFDFHAND AX,0EBEDHAX=0ABCDHXCHG AH,ALAX=0CDABHSAL AX,1AX=9B56H (CF=1,PF=1)1100 1101 1010 1011算术左移RCL AX,1AX=36

15、ADH (CF=1,PF=1,OF=1)1001 1011 0101 0110带进位循环左移循环移位指令不影响除CF和OF以外的其他条件标志。移位指令根据移位后的结果设置SF、ZF和PF位,AF位则无定义。RCL:OF=1最高有效位的值发生变化;PF保留原来的值;2.11 将十六进制数62A0H与下列各个数相加,试给出和数及标志位AF,SF,ZF,CF,OF和PF的状态。(1) 9D60H和数:0HAF=0,SF=0,ZF=1,CF=1,OF=0,PF=1(2) 4321H和数:0A5C1HAF=0,SF=1,ZF=0,CF=0,OF=1,PF=02.12 从下列各个数中减去4AE0H,试给出

16、差值及标志位AF,SF,ZF,CF,OF和PF的状态。(1)1234H (2)9090H解:AF0,SF1,ZF0,CF1,OF0,PF0AF0,SF0,ZF0,CF0,OF1,PF02.13 假设BX00E3H,字变量VALUE中存放的内容为79H,确定下列各条指令单独执行后的结果。题号指令BX寄存器的内容简单解释(1)XOR BX,VALUE009AH0000 0000 1110 0011 XOR 0000 0000 0111 1001(2)AND BX,VALUE0061H0000 0000 1110 0011 AND 0000 0000 0111 1001(3)OR BX,VALUE0

17、0FBH0000 0000 1110 0011 OR 0000 0000 0111 1001(4)XOR BX,0FFH001CH0000 0000 1110 0011 XOR 0000 0000 1111 1111(5)AND BX,00000H(6)TEST BX,01H00E3HTEST指令只影响标志位,不影响结果(1) XOR OSZAPC:0XXUX0 SF=0; ZF=0; PF=1(2) AND OSZAPC:0XXUX0 SF=0; ZF=0; PF=0(3) OR OSZAPC:0XXUX0 SF=0; ZF=0; PF=0(4) XOR OSZAPC:0XXUX0 SF=0

18、; ZF=0; PF=0(5) AND OSZAPC:0XXUX0 SF=0; ZF=1; PF=1(6) TEST OSZAPC:0XXUX0 SF=0; ZF=0; PF=02.14 试写出执行下列指令序列后BX寄存器的内容。执行前BX=6D16H。MOV CL, 7SHR BX, CL解:BX=6D16H 0110 1101 0001 0110B执行后:0000 0000 1101 1010B = 00DAH2.15 假定DX=00B9H,CL=3,CF=1,确定下列各条指令单独执行后DX中的值。题号指令DX寄存器的内容简单解释(1)SHR DX,1005CH00B9H = 0000 0

19、000 1011 1001B逻辑右移(2)SAR DX,CL0017H00B9H = 0000 0000 1011 1001B算术右移(3)SHL DX,CL05C8H00B9H = 0000 0000 1011 1001B逻辑左移(4)SHL DL,10072HB9H = 1011 1001B 逻辑左移(5)ROR DX,CL2017H00B9H = 0000 0000 1011 1001B 循环右移(6)ROL DL,CL00CDHB9H = 1011 1001B 循环左移(7)SAL DH,100B9HDH = 0 算术左移(8)RCL DX,CL05CCH00B9H = 0000 00

20、00 1011 1001B 带进位循环左移(9)RCR DL,100DCHB9H = 1011 1001B 带进位循环右移第3章 宏汇编语言程序设计3.1 对于下面的数据定义,各条指令单独执行后,有关寄存器的内容是什么?FLDB DB ?TABLEA DW 20 DUP(?)TABLEB DB 'ABCD'(1) MOV AX, TYPE FLDB ; AX = 01H;字节类型(2) MOV AX, TYPE TABLEA ; AX = 02H;字类型(3) MOV CX, LENGTH TABLEA ; CX = 14H;DUP定义的变量,分配的单元数(4) MOV DX,

21、 SIZE TABLEA ; DX = 28H;SIZE = LENGTH * TYPE(5) MOV CX, LENGTH TABLEB ; CX = 01H;非DUP定义的变量,LENGTH=13.2 试写出完成下列操作的伪指令语句:(1) 将56H, 78, B3H, 100存放在定义为字节变量ARRAY的存储单元中。ARRAY DB 56H, 78, 0B3H, 100(2) 将字数据2965H, 45H, 2965, A6H存放在定义为字变量DATA的存储单元中。DATA DW 2965H, 45H, 2965, 0A6H(3) 将字节数据56H, C6H, 78H, 12H存放在字

22、变量ALPHA的存储单元中,并且不改变数据按字节存储的次序。ALPHA DW 0C656H, 1278H(4) 在BETA为首址的存储单元中连续存放字节数据,2个23,5个'A',10个(1, 2),20个空单元。BETA DB 2 DUP ( 23 ), 5 DUP ( 'A' ), 10 DUP (1, 2), 20 DUP ( ? )(5) 在STRING为首址的存储单元中存放字符串'THIS IS A EXAMPE'。STRING DB 'THIS IS A EXAMPE'(6) 用符号COUNT替代100。COUNT E

23、QU 100 ( 或COUNT = 100 )3.3 画图表示下列语句中数据在存储器中的存储情况。(1) BYTE_VAR DB 'ABCD', 76, 57H, 3 DUP ( ? ), 2 DUP (1, 3)(2) WORD_VAR DW 5 DUP (0, 1), ?, 'AB', 'CD', 7965。(1) 从左到右、从上到下为地址增大的方向。41H42 H43 H44 H4CH57 H? ?01 H03 H01 H03 H(2) 从左到右、从上到下为地址增大的方向。0000010000000100000001000000010000

24、000100?424144431D1F3.4设置一个数据段DATA_SEG,其中连续存放下列的8个变量,用段定义语句和变量定义语句写出数据段:(1) DATA1为字符串变量: 'DATA SEGMENT'(2) DATA2为十进制数字字节变量: 72, 65, -10(3) DATA3 为十六进制数字字节变量: 109, 98, 21, 40(4) DATA4为10个零的字节变量(5) DATA5为数字的ASCII字符字节变量: 12345(6) DATA6为十进制数的字变量: 7, 9, 298, 1967(7) DATA7为十六进制数的字变量: 785, 13475(8)

25、DATA8为本段中字变量和字节变量之间的字节单元数之差。解:DATA SEGMENTDATA1 DB 'DATA SEGMENT'DATA2 DB 72, 65, -10DATA3 DB 6DH, 62H, 15H, 28HDATA4 DB 10 DUP (0)DATA5 DB '12345'DATA6 DW 7, 9, 298, 1967DATA7 DW 0311H, 34A3HDATA8 DB $ - DATA6 - (DATA6 - DATA1)DATA ENDS3.5假设程序中的变量定义如下:BUF1 DB 100 DUP ('A')BU

26、F2 DW 1275H, 567, 0C5HBUF3 DB 20 DUP (?)BUF4 DB 7, 4, 6, 9, 8(1) 用一条指令将BUF1的偏移地址送入BX。MOV BX, OFFSET BUF1或 LEA BX, BUF1(2) 将BUF2的第三字节数据送入CL。MOVCL, BUF2+2(3) 将A6H送入BUF3的第十个字节单元中。MOVBUF3+9, 0A6H(4) 用伪指令写出BUF1和BUF2二者的总长度(字节数)COUNT EQU BUF3 - BUF13.6 给出等值语句如下:ALPHA EQU 100BETA EQU 25GAMMA EQU 2求下列表达式的值:(

27、1) ALPHA * 100 + BETA ; 10025D = 2729H(2) ALPHA MOD GAMMA + BETA ; 100 MOD 2 + 25 = 25D = 0019H(3) (ALPHA + 2) * BETA - ALPHA ; (100 + 2 ) * 25 100 = 2450D = 0992H(4) (BETA / 3) MOD 5 ; (25 / 3) MOD 5 = 03H(5) BETA AND 7 ; 0001 1001 AND 0000 0111 = 01H(6) GAMMA OR 3 ; 0000 0010 OR 0000 0011 = 0003H3

28、.7 下列语句中,在存储器中每个变量分配到多少字节?VR1 DW 9 ; 2字节VR2 DW 4 DUP (?), 2 ; 4 * 2 + 2 = 10字节VR3 EQU 100 ; 0字节VR4 DD VR3 DUP (?) ; 100 * 4 = 400字节VR5 DB 2 DUP (?, VR3 DUP (0, 1) ) ; 2 * ( 1 + 100 * 2 ) = 402字节VR6 DB 'HOW ARE YOU?' ; 12字节3.8 试写出一个完整的数据段DATA_SEG,首先把10个压缩的BCD码29存放在ARRAY变量字节单元中,紧接着把-25, 4, 10,

29、 76, 3存放在ALPHA数组变量的字单元中,接着留100个空单元作为工作单元用,它定义为字节变量BUFFER。DATA_SEG SEGMENTARRAY DB 10 DUP ( 29H )ALPHA DW -25, 4, 10, 76, 3BUFFER DB 100 DUP ( ? )DATA_SEG ENDS3.9 将存放在字节变量BCD1中的两个十进制数的ASCII码合并为一字节压缩型BCD码,存入字节变量BCD2,试编写程序。DATA SEGMENTBCD1 DB '34'BCD2 DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS

30、:DATASTART: MOV AX,DATA MOV DS,AX MOV AL, BCD1 MOV CL, 4 SAL AL, CL MOV BL, BCD1+1 AND BL, 0FH OR AL, BL MOV BCD2, AL MOV AH, 4CH INT 21HCODE ENDS END START3.10 分析下列程序段,并说明完成什么操作。ADDNUM DB 28H, 46H, 95H, 26HADDSUM DB 2 DUP (?)MOV AL, ADDNUM ; ADDNUM第1个数据送到ALADD AL, ADDNUM + 2 ; ADDNUM第3个数据加到ALDAA ;

31、加法的十进制调整指令MOV ADDSUM, AL ; ADDNUM第1、3个数据的和放到ADDSUMMOV AL, ADDNUM + 1 ; ADDNUM第2个数据送到ALADC AL, ADDNUM + 3 ; ADDNUM第4个数据加到ALDAA ; 加法的十进制调整指令MOV ADDSUM + 1, AL ; ADDNUM第2、4个数据的和放到ADDSUM + 1解:将ADDNUM的第1、3个数据相加,并将结果进行十进制调整转换为压缩型BCD码,并放到ADDSUM的第1个字节的位置;将ADDNUM的第2、4个数据相加,并将结果进行十进制调整转换为压缩型BCD码,并放到ADDSUM的第2个

32、字节的位置。即:46282695,结果调整为压缩型BCD码,结果以字变量形式放到ADDSUM单元。3.11 写出完成下述功能的程序段:(1) 将32H存入CH中。(2) 将CH中的内容与2AH相加。(3) 将CH中的内容乘2。(4) 将CH中的内容存入以BX作为相对基址寻址的数组变量NUM的第十个字节单元中(数据段)。问:各程序段分别执行后,CH中的内容是多少?MOV CH, 32H ; (1) CH = 32HADD CH, 2AH ; (2) CH = 5CHMOV AL, 02H ; MUL CH ; (3) CH = 5CH, AX = 0B8HMOV BX + NUM + 9, CH

33、 ; (4) CH = 5CH3.12 编写程序,计算Z = ( ( W X ) / 10 * Y )2,r为相除所得余数。其中W, X, Y均为8位有符号二进制数。DATA SEGMENTW DB 12X DB 24Y DB 48Z DW 2 DUP (?)r db ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AL, W SUB AL, X ; W - X -> AL CBW MOV BL, 10 IDIV BL ; (W - X) / 10 -> AL MOV r,

34、AH ; (W - X) % 10 -> r MOV BL, Y IMUL BL ; (W - X) / 10 * Y -> AX MOV BX, AX IMUL BX ; (W - X) / 10 * Y)2 -> DX, AX MOV Z, AX MOV Z+2, DX ; (W - X) / 10 * Y)2 -> Z MOV AH, 4CH INT 21HCODE ENDS END START3.13 在数组字变量ARRAY中有10个数据,将数组中的第5个字数据求补,再放回原处,画出程序流程图和编写程序。3.14 用重复前缀串比较指令比较两个字符串,一个是在数据

35、段的字符串变量STR1(内容为'THIS IS A DOG'),另一个是在附加段的字符串变量STR2(内容为'THIS IS A COCK')。当比较到第一个不相同的字符时停止比较,把相同部分字符串长度存入数据段的字节变量NUM中。写出分段结构的程序段,应包括段定义,伪指令和指令序列。问:相同部分字符串长度为多少?在STR1和STR2第一个不同处的偏移地址是多少?DATA SEGMENTSTR1 DB 'THIS IS A DOG'LEN1 DB $-STR1NUM DB ?DATA ENDSEDATA SEGMENTSTR2 DB 'T

36、HIS IS A COCK'LEN2 DB $-STR2EDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:EDATASTART: MOV AX,DATA MOV DS,AX MOV AX,EDATA MOV ES,AX CLD ;串操作由低地址向高地址 MOV CH,0 MOV AL,LEN1 CMP AL,ES:LEN2 JB B1L2 MOV CL,ES:LEN2 JMP CMPOKB1L2: MOV CL,ALCMPOK: LEA SI,STR1 LEA DI,ES:STR2 REPE CMPSB MOV AX,SI DEC AL

37、;不同处的字节偏移地址 MOV NUM,AL ;不同处的字节偏移地址放到NUM MOV AH, 4CH INT 21HCODE ENDS END START答:相同长度10,不同处的偏移地址103.15 有两个压缩型BCD码相加,被加数(6756)和加数(7321)存放在数据段的BUFFER变量的4个连续的字节存储单元中,结果(和)存放在RESUT变量的三个字单元中(考虑到有进位的情况),编制具有数据段和代码段结构的完整程序,程序中需要作必要的注释。注:结果存放在RESUT字节变量中,三个字单元不知要求怎么用DATA SEGMENTBUFFER DB 67H,56H,73H,21HRESUT

38、DB 3 DUP (?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AL,BUFFER+1 ;第一个数据低两位->AL MOV BL,BUFFER+3 ;第二个数据低两位->BL ADD AL,BL ;低两位相加 DAA ;十进制调整 MOV DL,AL ;低两位相加结果放到DL MOV AL,BUFFER ;第一个数据高两位->AL MOV BL,BUFFER+2 ;第二个数据高两位->BL ADC AL,BL ;低两位相加 DAA ;十进制调整 MOV BL

39、,0 JNC HCF INC BLHCF: MOV RESUT,BL ;存放最高位 MOV RESUT+1,AL ;存放中间两位 MOV RESUT+2,DL ;存放最低两位 MOV AH, 4CH INT 21HCODE ENDS END START3.16 将SRCBUF变量定义的80个字符串传送到DSTBUF变量定义的存储区去。当遇到0DH时,不将此字符传送到DSTBUF变量中去。试编写程序,并加以注释。DATA SEGMENTSRCBUF DB 'aaa',0DH,'bbb'DSTBUF DB 80 DUP (?)DATA ENDSCODE SEGMEN

40、T ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV CX,07 ;比较次数->CX MOV SI,0 ;源串指针->SI MOV DI,0 ;目标串指针->DISDCMP: MOV AL,SRCBUFSI CMP AL,0DH JZ NSEND MOV DSTBUFDI,AL ;不等于0DH,保存数据,修改SI、DI INC DINSEND: INC SI ;等于0DH,不保存数据,修改SI LOOP SDCMP MOV AH, 4CH INT 21HCODE ENDS END START3.17 已知有n个元素存

41、放在以BUF为首址的字节存储区中,试统计其中负元素的个数,画出程序框图,编写程序。DATA SEGMENTBUF DB 92H,12H,0F3H,23H,87HLEN EQU $-BUFDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV CX,LEN ;比较次数->CX MOV SI,0 ;字节存储区指针 MOV DL,0 ;负元素个数初始化NEGCMP: MOV AL,BUFSI CMP AL,0 JNL C0GE INC DL ;小于0,个数加1,指针加1C0GE: INC SI ;

42、不小于0,指针加1 LOOP NEGCMP MOV AH, 4CH INT 21HCODE ENDS END START3.18 已知以BUF为首址的字存储区中存放着n个有符号的二进制数,试编写程序,将大于等于0的数送以BUF1为首址的字存储区中,将小于0的数送以BUF2为首址的字存储区中,并画出程序框图。DATA SEGMENTBUF DW 1212H,0FF12H,3434H,8989H,5656H,9090HLEN EQU ($ - BUF) / 2BUF1 DW LEN DUP (?)BUF2 DW LEN DUP (?)DATA ENDSCODE SEGMENT ASSUME CS:

43、CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV CX,LEN ;循环次数,即BUF的单元数 MOV BX,0 ;BUF指针初始化 MOV SI,0 ;BUF1指针初始化 MOV DI,0 ;BUF2指针初始化CLOOP: MOV AX,BX ;BUF数据->AX CMP AX,0 JGE TO1 MOV BUF2DI,AX ;AX<0,AX->BUF2,DI+2->DI,BX+2->BX INC DI INC DI JMP CONTINUETO1: MOV BUF1SI,AX ;AX>=0,AX->BUF1,S

44、I+2->SI,BX+2->BX INC SI INC SICONTINUE:INC BX INC BX LOOP CLOOP MOV AH, 4CH INT 21HCODE ENDS END START3.19 已知在以BUF为首地址的字节存储区中,存放着一个以$作结束标志的字符串,试编写程序,在CRT上显示该字符串,并要求将小写字母以大写字母形式显示出来。画出程序框图。DATA SEGMENTBUF DB 'abCDalskdjf$'DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV SI,0 ;BUF地址指针ALOOP: MOV DL,BUFSI ;BUF数据->DL CMP DL,'$' ;DL='$',EXIT JE STOP C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论