好文档 - 专业文书写作范文服务资料分享网站

编写程序

天下 分享 时间: 加入收藏 我要投稿 点赞
10

3.22试编写一程序求出双字长数的绝对值。双字长数在A和A+2单元中,结果存放在B和B+2单元中。

答:程序段如下:

MOV AX, A MOV DX, A+2 CMP DX, 0 JNS ZHENSHU ;不是负数则转走 NEG DX NEG AX SBB DX, 0

ZHENSHU: MOV B, AX

MOV B+2, DX INT 20H 3.30编写程序段,把字符串STRING中的‘&’字符用空格符代替。

STRING DB ‘The date is FEB&03’ 答:程序段如下:

MOV CX, 18 MOV AL, ‘&’ CLD

MOV DI, SEG STRING MOV ES, DI ;ES段基地址 LEA DI, STRING

REPNE SCASB ;不相等重复 JNE NEXT ;相等跳转 DEC DI

MOV ES:BYTE PTR [DI], ‘ ’ ;送空格符 NEXT: ┇

3.31假设数据段中数据定义如下: STUDENT_NAME DB 30 DUP (?) STUDENT_ADDR DB 9 DUP (?) PRINT_LINE DB 132 DUP (?) 分别编写下列程序段:

(1) 用空格符清除PRINT_LINE域。

(2) 在STUDENT_ADDR中查找第一个‘-’。 (3) 在STUDENT_ADDR中查找最后一个‘-’。

(4) 如果STUDENT_NAME域中全是空格符时,填入‘*’。

(5) 把STUDENT_NAME移到PRINT_LINE的前30个字节中,把STUDENT_ ADDR

移到PRINT_LINE的后9个字节中。 答:公共的程序段如下:

MOV DI, DS MOV ES, DI (1) MOV CX, 132

MOV AL., ‘ ’ ;空格的ASCII码送AL寄存器

4

CLD LEA DI, PRINT_LINE REP STOSB (2) MOV CX, 9

MOV AL., ‘-’ CLD LEA DI, STUDENT_ ADDR REPNE SCASB JNE NO_DASH DEC DI NO_DASH: ┇ (3) MOV CX, 9

MOV AL., ‘-’ STD LEA DI, STUDENT_ ADDR ADD DI, 9-1 REPNE SCASB JNE NO_DASH INC DI NO_DASH: ┇ (4) MOV CX, 30

MOV AL, ‘ ’ ;空格的ASCII码送AL寄存器 CLD LEA DI, STUDENT_NAME REPE SCASB JNE NEXT MOV CX, 30 MOV AL, ‘*’ ;“*”的ASCII码送AL寄存器 LEA DI, STUDENT_NAME REP STOSB NEXT: ┇ (5) MOV CX, 30

CLD LEA SI, STUDENT_NAME LEA DI, PRINT_LINE REP MOVSB MOV CX, 9 STD LEA SI, STUDENT_ADDR+9-1 LEA DI, PRINT_LINE+132-1 REP MOVSB

3.32编写一程序段:比较两个5字节的字符串OLDS和NEWS,如果OLDS字符串不同于

NEWS字符串则执行NEW_LESS;否则顺序执行程序。

答:程序段如下:

4

DI, SEG OLDS DS, DI ES, DI SI, OLDS DI, NEWS CMPSB NEW_LESS

NEW_LESS: ┇ 3.47请编写一程序段,要求把考虑溢出)。

答:MOV EDI,0

ADD EDI,ECX ADD EDI,EDX ADD EDI,ESI

ECX、EDX和ESI的内容相加,其和存入EDI寄存器中(不

也可为: MOV EDI,ECX ADD EDI,EDX ADD EDI,ESI

MOV

CLD MOV MOV MOV LEA LEA REPE JNE

CX, 5

3.49试编写一程序段,要求把BL中的数除以CL中的数,并把其商乘以2,最后的结果存入DX寄存器中。 答:MOV

MOV DIV MOV SHL MOV

AL,BL

AH,0 ;假定为无符号数,否则用CBW指令即可 CL AH,0

AX,1 ;逻辑左移1位 DX,AX

3.51试编写一程序段,要求在长度为100H字节的数组中,找出大于42H的无符号数的个数并存入字节单元UP中;找出小于42H的无符号数的个数并存入字节单元DOWN中。 答:JMP BEGIN ;无条件转移 存储器 UP DB 0 新(SP) 002EH DOWN DB 0 002FH TABLE DB 100H DUP (?) ;数组 0030H BEGIN: 0031H MOV CX,100H 0032H MOV BX,-1 ;数组下标 0033H 堆 MOV SI,0 0034H 栈 MOV DI,0 0035H 帧 L1:INC BX 0036H CMP TABLE[BX],42H 0037H JA L2 ;高于 0038H JB L3 ;低于 0039H JMP L4 ;否则跳到L4 003AH 新(BP) L2:INC SI ;UP 003BH JMP L4 003CH 原(SP)

3.52题的答案 4

L3:INC L4:LOOP

MOV MOV DI ;DOWN L1

UP,SI DOWN,DI

4.1 1试写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,2,

5和4放在10字数组DATA_LIST的头5个单元中。然后,写出完整的代码段,其功能为:把DATA_LIST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。 答:DATA_SEG SEGMENT

NUM DB 5

DATA_LIST DW -1, 0, 2, 5, 4, 5 DUP (?) MAX DW ? MIN DW ? DATA_SEG ENDS

;---------------------------------------------------------------- CODE_SEG SEGMENT MAIN PROC FAR

ASSUME CS: CODE_SEG, DS: DATA_SEG

START: PUSH DS ;设置返回DOS

SUB AX, AX PUSH AX

MOV AX, DATA_SEG ;给DS赋值 MOV DS, AX

MOV CX, 4 ;程序段开始 LEA BX, DATA_LIST MOV AX, [BX] MOV MAX, AX MOV MIN, AX

ROUT1: ADD BX, 2

MOV AX, [BX] CMP AX, MAX JNGE ROUT2 MOV MAX, AX

ROUT2: CMP AX, MIN

JNLE ROUT3 MOV MIN, AX

ROUT3: LOOP ROUT1 ;程序段结束

RET

MAIN ENDP CODE_SEG ENDS

;----------------------------------------------------------------

END START 4.17写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的AUGEND和附加

段E_SEG中的ADDEND相加,并把结果存放在D_SEG 段中的SUM中。其中AUGEND、

4

ADDEND和SUM均为双精度数,AUGEND赋值为99251,ADDEND赋值为 -15962。

答:程序如下:

D_SEG SEGMENT AUGW LABEL WORD AUGEND DD 99251 SUM DD ? D_SEG ENDS ;以上定义数据段 ;---------------------------------------------------------------- E_SEG SEGMENT ADDW LABEL WORD ADDEND DD -15962 E_SEG ENDS ;以上定义附加段 ;---------------------------------------------------------------- C_SEG SEGMENT MAIN PROC FAR

ASSUME CS: C_SEG, DS: D_SEG, ES: E_SEG

START: PUSH DS ;设置返回DOS

SUB AX, AX PUSH AX

MOV AX, D_SEG MOV DS, AX ;给DS赋值 MOV AX, E_SEG MOV ES, AX ;给ES赋值

MOV AX, AUGW ;以下6条指令进行加法计算 MOV BX, AUGW+2 ADD AX, ES: ADDW ADC BX, ES: ADDW+2 ;不考虑有符号数溢出 MOV WORD PTR SUM, AX MOV WORD PTR [SUM+2], BX RET

MAIN ENDP C_SEG ENDS ;以上定义代码段 ;----------------------------------------------------------------

END START

5.1 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。

答:程序段如下: BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用

INT 21H

CMP AL, ‘a’ ;输入字符<‘a’吗? JB STOP CMP AL, ‘z’ ;输入字符>‘z’吗? JA STOP SUB AL, 20H ;转换为大写字母,用AND AL, 1101 1111B也可

4

编写程序

3.22试编写一程序求出双字长数的绝对值。双字长数在A和A+2单元中,结果存放在B和B+2单元中。答:程序段如下:MOVAX,AMOVDX,A+2CMPDX,0JNSZHENSHU;不是负数则转走NEGDXNEGAXSBBDX,0ZHENSHU:MOVB,AXMOV
推荐度:
点击下载文档文档为doc格式
74g014ubxk77t6k14pg60zn011oo6h01am6
领取福利

微信扫码领取福利

Scan me!

微信扫码分享

闃呰骞舵帴鍙椼€婄敤鎴峰崗璁€�
娉細鍚勭櫥褰曡处鎴锋棤鍏宠仈锛佽浠呯敤涓€绉嶆柟寮忕櫥褰曘€�


鐢ㄦ埛娉ㄥ唽鍗忚

涓€銆� 鏈綉绔欒繍鐢ㄥ紑婧愮殑缃戠珯绋嬪簭骞冲彴锛岄€氳繃鍥介檯浜掕仈缃戠粶绛夋墜娈典负浼氬憳鎴栨父瀹㈡彁渚涚▼搴忎唬鐮佹垨鑰呮枃绔犱俊鎭瓑鏈嶅姟銆傛湰缃戠珯鏈夋潈鍦ㄥ繀瑕佹椂淇敼鏈嶅姟鏉℃锛屾湇鍔℃潯娆句竴鏃﹀彂鐢熷彉鍔紝灏嗕細鍦ㄩ噸瑕侀〉闈笂鎻愮ず淇敼鍐呭鎴栭€氳繃鍏朵粬褰㈠紡鍛婄煡浼氬憳銆傚鏋滀細鍛樹笉鍚屾剰鎵€鏀瑰姩鐨勫唴瀹癸紝鍙互涓诲姩鍙栨秷鑾峰緱鐨勭綉缁滄湇鍔°€傚鏋滀細鍛樼户缁韩鐢ㄧ綉缁滄湇鍔★紝鍒欒涓烘帴鍙楁湇鍔℃潯娆剧殑鍙樺姩銆傜綉绔欎繚鐣欓殢鏃朵慨鏀规垨涓柇鏈嶅姟鑰屼笉闇€鐭ョ収浼氬憳鐨勬潈鍒┿€傛湰绔欒浣夸慨鏀规垨涓柇鏈嶅姟鐨勬潈鍒╋紝涓嶉渶瀵逛細鍛樻垨绗笁鏂硅礋璐c€�

鍏抽棴