程序
更新时间:2024-01-24 01:46:01 阅读量: 教育文库 文档下载
1、f(X)= 5X + 4X - 3X + 2 ,要求编制程序计算自变量X=5时函数f(X)的值。
DATA SEGMENT X DW 5 RESULT DW ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX MOV AX,5 MUL X MUL X MUL X
;5*X ;5*X+4 ;(5*X+4)X ;(5*X+4)X-3 ;((5*X+4)X-3)X ;((5*X+4)X-3)X+2
;保存运算结果
ADD AX,4 SUB AX,3 ADD AX,2 MOV AH,4CH INT 21H
CODE ENDS
END START
;返回DOS
;装填数据段
32
MOV RESULT,AX
2、 比较两个无符号数的大小。
DATA SEGMENT A DB 20H B
DB 92H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX MOV AL,A CMP B,AL JA BGA
;取数送AL ;比较二数 ;若B> A转BGA
;准备显示A> B
MOV DL,‘A’ MOV BL,‘B’
BGA: MOV DL,‘B’
MOV BL,‘A’
JMP DISP
;准备显示B> A
DISP: MOV AH,2
INT 21H
MOV DL,‘>’ INT 21H MOV DL,BL INT 21H
;显示比较结果
MOV AH,4CH INT 21H
;返回DOS
CODE ENDS
END START
3、 某应用程序主菜单有8个可选项,其入口地址分别记为R0、R1 ?R7。要求编制程序根据变量N的值转向相应的处理程序(N为入口编号)。
DATA BASE N
SEGMENT DW DB 5 ENDS SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX MOV AL,N ADD AL,AL MOV AH,0
MOV BX,OFFSET BASE ADD BX,AX JMP AX
R0:
┇ ┇
JMP OK
R1:
;R1的处理程序
JMP OK
MOV AX,[BX]
;跳转表首地址送BX ;得到Rn的存放地址 ;入口地址送AX ;跳转到相应的处理程序 ;R0的处理程序
;入口编号N送AL ;2×N →AL
R0,R1,R2,R3
DW R4,R5,R6,R7
DATA CODE
┇
┇
;R7的处理程序 ;返回DOS操作系统
MOV AH,4CH INT 21H
R7: OK:
CODE ENDS
END START
4、从BUF单元开始存有20个8位带符号数,要求统计其中的负数个数放在NEGA字节单元,并显示在CRT上(设负数个数在0~9之间)。
DATA BUF COUNT NEGA DATA CODE
SEGMENT
DB 2,-1,56,-38,4,┅ EQU 20
DB ? ENDS SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV
DS,AX
BUF
;置数据指针SI
MOV SI,OFFSET
MOV
LP:
DL,0
;计数器清零
MOV CX,COUNT MOV AL,[SI] AND
JNS NEXT INC DL
NEXT:
INC SI LOOP LP
AL,AL
;置循环次数 ;取数送AL
;置标志位
;为正,转NEXT ;为负,计数器加1 ;修改指针 ;未完,继续 ;存结果 ;转换成ASCII码
;显示这组数中负数的个数 ;返回DOS
MOV NEGA,DL OR DL,30H MOV MOV
CODE
ENDS
END START INT 21H INT 21H
AH,2 AH,4CH
5、已知在内存中从STR单元开始放有一串字符,以‘$’作为结束标志,长度不超过
100字节,要求统计该字符串的长度,并存于LEN单元。
DATA STR LEN DATA STACK STT STACK CODE
SEGMENT
DB ‘ABCDJKLLHH┅$’ DB 0 ENDS SEGMENT ENDS SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV MOV MOV
DS,AX AX,STACK SS,AX
;字符串首址送DI
;结束标志送AL ;将串中字符与结束标志比较 ;是‘$’字符,转STOP
;不是‘$’字符,串长计数器加1 ;修改地址指针 ;继续循环 ;返回DOS
PARA STACK
‘STACK’
DB 100 DUP(?)
MOV SP,SIZE STT LEA DI,STR MOV
LP:
AL,‘$’
CMP AL,[DI]
JZ STOP INC LEN INC DI JMP LP
STOP: CODE
MOV ENDS
END START INT 21H
AH,4CH
6、:将内存区域中的两个单字节数相加,结果送第3字节,并将结果转换成十进制数送CRT显示(假设结果小于100)。
DATA LIST DATA CODE
SEGMENT DB 16,48,? ENDS SEGNENT
ASSUME CS:CODE,DS:DATA
START: MOV
AX,DATA MOV
DS,AX
CALL ADSUB CALL OUTPR MOV
AH,4CH
INT 21H
ADSUB
PROC
MOV AL,LIST
ADD AL,LIST+1 MOV LIST+2,AL
RET
ADSUB ENDP DISPL
PROC
OR DL,30H MOV AH,2
INT 21H
RET
DISPL ENDP OUTPR
PROC
MOV AL,LIST+2 MOV AH,0 MOV BL,10
DIV BL
MOV DL,AL MOV BH, AH
CALL DISPL MOV DL,BH
CALL DISPL
RET
OUTPR ENDP CODE
ENDS END START
;两数相加并存放结果
;显示结果
;返回DOS ;取数送AL ;两数相加
;存结果 ;显示DL中的字符
;取数送AL
;AH清零
;高位送DL ;低位送BH保存
;显示高位
;显示低位
7、有两个多字节的压缩型十进制数分别存于从A和B单元开始的数据区中,试将其相加并将十进制结果存于从C单元开始的数据区中。设压缩型十进制数长度为10个字节,被加数、加数和结果的低字节均存于低地址单元。
DATA A B C N
SEGMENT
DB 12H,38H,63H,? DB 10 DUP(?) EQU 10 ENDS SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV
MOV MOV MOV MOV MOV CLC
NEXT: MOV AL,[SI]
ADC DAA INC SI INC DI INC BX LOOP NEXT MOV
CODE ENDS
END START INT 21H
;调整地址指针 ;未完,继续
;取被加数一个字节
;与加数对应字节相加 ;十进制调整
AL,[DI] AX,DATA DS,AX
SI,OFFSET A DI,OFFSET B CX,N
BX,OFFSET C
;置被加数的地址指针 ;置加数的地址指针 ;置结果地址指针
;10个被加数 ;结果单元
;运算数据的字节数
DB 88H,27H,42H,? ;10个加数
DATA CODE
MOV [BX],AL ;存结果
AH,4CH
8、已知从DATA1单元开始存有10个字节的压缩BCD码,要求编程将其转为ASCII
码并显示在CRT上。
DATA DATA1 N
SEGMENT
DB 34H,68H,76H,?
EQU $-DATA1 ;$代表当前地址,减去DATA1地址即为10。 SEGMENT PARA STACK ‘STACK’ DB 100 DUP (?) ENDS
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV
DS,AX
MOV AX,STACK
DATA ENDS STACK STA STACK
CODE SEGMENT
MOV
CODE ENDS
AH,4CH
;返回DOS ;代码段结束 ;源程序结束
INT 21H
END START
(2) 求AH与AL中数的和,将结果转换成ASCII码,然后在屏幕上显示出来。程序代
码如下:
CODE SEGMENT
;保存AX中的数据 ;移位次数
;千位移到AH低4位 ;转换成ASCII码 ;代码段开始
ASSUME CS:CODE
START: MOV BX,AX
MOV CL,4 SHR AH,CL ADD AH,30H MOV DL,AH MOV AH,2 INT 21H
;调用2号系统功能,输出单字符 ;取低4位 ;转换成ASCII码
MOV AH,BH AND AH,0FH ADD AH,30H MOV DL,AH MOV AH,2 INT 21H
;调用2号系统功能,输出单字符 ;移位次数
;十位移到低4位 ;转换成ASCII码
MOV AL,BL MOV CL,4 SHR AL,CL ADD AL,30H MOV DL,AL MOV AH,2 INT 21H
;调用2号系统功能,输出单字符 ;取低4位 ;转换成ASCII码
MOV AL,BL AND AL,0FH ADD AL,30H MOV DL,AL MOV AH,2 INT 21H MOV
CODE
ENDS INT 21H
;调用2号系统功能,输出单字符 ;返回DOS ;代码段结束 ;源程序结束
AH,4CH
END START
16、已知从BUF单元开始存放着10个8位无符号数,要求编写汇编语言程序将这10个数
去掉一个最大的,再去掉一个最小的,将其余的数的算术平均值计算出来并存于AVERG单字节单元。
【解】注意:10个8位无符号数的累加和有可能超过8位,需要16位的寄存器存储。寄存器分配:DL:最小值;DH:最大值;CX:循环次数;AX:累加和。
本题的思路:找出最小值,暂时存于DL,找出最大值,暂时存于DH,求10个数的和,
再减去最小值和最大值,求8个数的平均值。
程序代码如下:
DATA BUF AVERG DATA CODE
SEGMENT DB ? ENDS
;数据段结束
;代码段开始
SEGMENT
;数据段开始
DB 23H,26H,44H,98H,32H,72H,39H,62H,75H,48H
ASSUME CS:CODE,DS:DATA
START: MOV
MOV
AX,DATA DS,AX
;装填数据段 ;传送变量的地址
LEA BX,BUF XOR AX,AX MOV CX,9 MOV DL,[BX] MOV DH,[BX] MOV AL,[BX]
LP1: INC BX
CMP DL,[BX] JBE CONT1 MOV DL,[BX]
CONT1: CMP DH,[BX]
JAE CONT2 MOV DX,[BX]
CONT2: ADD AL,[BX]
ADC
AH,0
LOOP LP1 SUB AL,DL SBB AH,0 SUB AL,DH SBB AH,0 MOV BL,8 DIV BL MOV
CODE
ENDS
;if DL>[BX], then DL←[BX] ;if DL<=[BX], 转移 ;if DH<[BX], then DH←[BX] ;if DL>=[BX], 转移
;平均值在AL中
MOV AVERG,AL
AH,4CH
;返回DOS ;代码段结束 ;源程序结束
INT 21H
END START
17、从TABLE字节单元开始存有100个无符号数,试编程把数组中出现次数最多的数存入CH中,其出现次数存入CL中。 【解】程序代码如下:
DATA TABLE DATA CODE
SEGMENT ENDS
;数据段开始
DB 100 DUP(?)
;数据段结束
;代码段开始
SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV
MOV
AX,DATA DS,AX
;装填数据段 ;传送变量的地址
LEA BX,TABLE XOR AX,AX XOR DX,DX MOV
LP2:
CX,99
PUSH BX PUSH CX MOV LP1:
AH,[BX] INC BX
MOV AL,1 CMP AH,[BX] JNE NEXT1 INC AL
NEXT1: LOOP LP1
POP CX POP BX INC BX CMP AL,DL JB NEXT2 MOV DL,AL MOV DH,AH
NEXT2: LOOP LP2
MOV CX,DX MOV
CODE
ENDS
AH,4CH
INT 21H
;AH !=[BX],转移
;AL
;返回DOS ;代码段结束 ;源程序结束
END START
18、 有两个长度不等的字符串,分别存于STRN1和STRN2单元开始的存储区,字串长度分别存放于LS1和LS2字节单元,要求编程将短串接在长串之后,并将连接后的串长度存于LS1和LS1+1单元。
【解】设两串连接后最大长度为256个字符,连接后的字符串存于STRN3单元开始的存储区。程序代码如下:
DATA STRN1 STRN2 STRN3
SEGMENT
;数据段开始
DB ‘i swear by the moon and the stars in the sky.’ DB ‘and i swear like the shadow thats by your side. ’ DB 256 DUP(?)
LS1 DB 45 LS2 DB 48 DATA
ENDS
;数据段结束 ;代码段开始
CODE SEGMENT START: MOV
ASSUME CS:CODE,DS:DATA
AX,DATA
MOV DS,AX XOR AX,AX XOR BX,BX MOV AL,LS1 MOV BL,LS2 CMP AL,BL JA LINK2
LINK1: LEA BX,STRN2
LEA SI,STRN3
XOR CX,CX MOV CL,LS2
LOP1:
MOV AL,[BX] MOV [SI],AL INC BX INC SI LOOP LOP1 LEA BX,STRN1
MOV CL,LS1
LOP2:
MOV AL,[BX] MOV [SI],AL INC BX INC SI LOOP LOP2 JMP NEXT
LINK2: LEA BX,STRN1
LEA SI,STRN3
XOR CX,CX MOV CL,LS1
LOP3:
MOV AL,[BX] MOV [SI],AL INC BX INC SI LOOP LOP3 LEA BX,STRN2
MOV CL,LS2
LOP4:
MOV AL,[BX] MOV [SI],AL INC BX INC SI LOOP LOP4
NEXT:
XOR AX,AX XOR BX,BX MOV AL,LS1 MOV BL,LS2
;装填数据段
;AL>BL,大数在LS1中,转移到LINK2 ;传送变量的地址 ;传送变量的地址
;传送变量的地址
;传送变量的地址 ;传送变量的地址 ;传送变量的地址 ADD AX,BX LEA BX,LS1 MOV [BX],AX
STOP:
MOV
AH,4CH
;返回DOS ;代码段结束 ;源程序结束
INT 21H
CODE ENDS
;将连接后的串长度存于LS1和LS1+1单元。
END START
19、从BUF字节单元开始存有按增序排好顺序的一个带符号数组,数组长度在LEN字节单元。在POSI字节单元存有一个正数,要求将其按顺序插入到数组中,并修改数组长度。
【解】程序代码如下:
DATA SEGMENT BUF
LEN DB ? POSI DB 32 DATA
ENDS
;数据段结束 ;代码段开始
CODE SEGMENT START: MOV
MOV
;数据段开始
DB -33,-29,-6,-4, 4,21,33, 34, 34,49……
ASSUME CS:CODE,DS:DATA
AX,DATA DS,AX
;装填数据段 ;传送变量的地址
LEA BX,BUF XOR CX,CX MOV CL,LEN MOV AH,POSI
LP1: MOV AL,[BX]
CMP AH,AL JL NEXT INC BX LOOP LP1
;AH < AL,转移
MOV [BX],AH JMP STOP
NEXT: LP2:
ADD BX,CX MOV AL,[BX] MOV [BX+1],AL DEC BX LOOP LP2 MOV [BX],AH
STOP:
MOV AL,LEN INC AL
MOV LEN,AL MOV
CODE ENDS
AH,4CH
INT 21H
;新数据插入到数组尾 ;指针移向数组尾
;插入新数据
;修改数组长度 ;返回DOS ;代码段结束 ;源程序结束
END START
20、假设DX=36A5H,CL=3,CF=1,确定下列各条指令执行后DX和CF的值。
(1) SHR DX,1 (2) SAR DX,CL (3) SHL DX,CL (4) SHL DL,1 (5) ROR DX,CL (6) ROL DL,CL (7) SAL DH,1 (8) SAR DH,CL (9) RCL DX,CL (10)RCR DX,CL 【解】
(1) 指令执行后DX:1B52H,CF:1 (2) 指令执行后DX:06D4H,CF:1 (3) 指令执行后DX:6D4AH,CF:0 (4) 指令执行后DX:364AH,CF:1 (5) 指令执行后DX:0C6D4H,CF:1 (6) 指令执行后DX:362DH,CF:1 (7) 指令执行后DX:6CA5H,CF:0 (8) 指令执行后DX:06A5H,CF:1 (9) 指令执行后DX:0B529H,CF:1 (10) 指令执行后DX:0A6D4H,CF:1
21、编写程序段将寄存器AL中的8位二进制数的内容颠倒过来,即将原来的最高位变为最低位,次高位变为次低位,以此类推,若原AL的内容为01110001B,则颠倒之后变为10001110B。
【解】程序段如下:
XOR AH,AH MOV CX,8
LP1: SHR AL,1
RCL AH,1 LOOP LP1 MOV AL,AH
;存回AL
;AH清零 ;重复8次
;逻辑右移,将最最低位移入CF
;带进位的循环左移,将CF移入AH的最低位
22、 用串操作指令将100H个字符从2100H处搬到1000H处,并且从中检索与AL中所存字符相同的存储单元,并将该单元的内容替换成空格,本程序只替换检索到的第一个相同的单元。请在下列空格中填入合适的指令,使程序段完成上述功能。
┇
MOV SI,2100H (1) MOV CX,100H CLD
(2) MOV DI,1000H MOV CX,100H (3) JNZ K1 (4) MOV [DI],20H K1: ┇
【解】
(1) MOV DI,1000H (2) REP MOVSB (3) REPNE SCASB (4) DEC DI
23、编程求出AX中存放的16位二进制数中‘1’的个数,将其存入CL中(若AX=1001010011001011B则将8存入CL)。 【解】程序段如下:
MOV CX,16 XOR BX,BX
L1: SHL AX,1
RCL BL,1 ADD BH,BL XOR BL,BL LOOP L1 MOV CL,BH
;最低位移入CF ;CF移入最低位
24、 已知BUF单元有一个单字节无符号数X,按要求编写一程序段计算Y(仍为单字节数),并将其存于累加器。
3X,X<20
Y= X-20,X≥20
【解】程序段如下:
XOR AX,AX MOV AL,BUF CMP AL,20 JNB L1 MOV BL,3 MUL BL JMP END
L1: SUB AX,20 END: HLT
正在阅读:
程序01-24
学校班主任年终个人总结精编例文08-03
谷氨酸发酵工艺参数的模式识别优化设计04-21
浅谈如何在小学英语教学中实施德育教育10-11
QC使用说明测试流程01-05
人类驯化动物历史-20150501-AllenLew - 图文09-17
关于香港医疗改革的总思路03-08
月工作总结模板下载范文08-03
保代考试题目112-13
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 2015最新人音版三年级下册音乐教案 - 图文
- 网络扫描实验报告
- 三极管参数代换表
- 一次函数及其性质
- 中央企业领导人员管理暂行规定
- 安般法门重点在(南师衣中珠之探寻系列)
- 八年级数学第一章《勾股定理》练习 - 4
- 2015年长宁区中考物理二模含答案
- 《S109FA联合循环发电机组Mark VI控制系统》思考题
- 质量管理案例
- 工程地质岩石分类及鉴定
- 大学生社交礼仪论文
- APAP4基本语法参考
- 我国有色冶炼及烟气制酸的现状与展望
- 人教版高中化学选修四 - 酸碱中和滴定教案设计 - 图文
- 建筑学学校建筑规划设计论文中英文资料外文翻译文献
- 最新部编版三年级语文上册教案教学设计导学案 灰雀3
- 如何处理餐饮员工之间的矛盾?管理大咖经验分享
- 小学科学学生探究活动记录表(五年级下) - 图文
- 江西版小学五年级美术上册期末试题