【程序源代码】 DATA SEGMENT
ORG 2000H ;数据存放在2000H开始的单元
BCD DB 20H,28H,49H,88H,0A4H,0B3H,83H,30H,44H,01H DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV SI,2000H ;地址指针置初值 MOV CX,10 ;字节数送CX
MOV DL,80H ;最小的有符号的字节数据,即负数最小值 L1: LODSB ;从SI所指单元取一个字节送AL,SI+1->SI CMP AL,DL ;比较带符号数(AL)>(DL)么? JNG L2 ;(DL)大则跳转L2 MOV DL,AL ;DL指向内容小则交换 L2: LOOP L1 ;字节未比较完则继续
MOV DS:[2000H],DL;最大数存放在2000H单元 MOV AH,4CH INT 21H
4
CODE ENDS
END START
【程序运行结果】
运行:BCD DB 20H,28H,49H,88H,0A4H,0B3H,83H,30H,44H,01H
结果:BCD DB 49H,28H,49H,88H,0A4H,0B3H,83H,30H,44H,01H 最大的数为49H,存放在DS:2000H单元中。
实验1.3:教材P195,第6题
试编制一程序,用乘法指令实现32位二进制数与16位二进制数相乘。 【实验原理】
设A、B为被乘数的高、低16位二进制数,C为16位二进制乘数,通过分析可知,共需进行两次乘法运算,每次进行两个16位二进制数的乘法,共得到两个部分积,然后再求部分积累加和。 【程序框图】
开始计算BxC计算结果低位存放在M3中,高位存放在M2中。计算AxC计算结果低位与M2中值相加并存放在M2中,使用带进位的加法指令将高位存放在M1中。结束
5 【程序源代码】 DATA SEGMENT ORG 1000H
N1 DW 1234H;A数 N2 DW 5678H;B数 N3 DW 4444H;C数 ORG 1010H
M1 DW 0 ;存放结果的高16位 M2 DW 0 ;存放结果的中间16位 M3 DW 0 ;存放结果的低16位
DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA MOV DS,AX MOV AX,N2
MUL N3 ;BxC MOV M3,AX MOV M2,DX MOV AX,N3
MUL N1 ;AxC ADD M2,AX ADC M1,DX MOV AH,4CH INT 21H
CODE ENDS END START
【程序运行结果】
执行:12345678Hx4444H= 04DABCDED7E0H 乘数和被乘数存放在:DS:1000H中 相乘结果存放在:DS:1010H
6
实验1.4:教材P196,第12题
设有两个等字长,字节型字符串,试编写一汇编程序,比较它们是否完全相等,若 相等则将字符Y送入AL中,否则将字符N送入字符中。 【实验原理】
首先分别将要比较的字符串1和字符串2的首地址送入SI、DI中,然后利用重复指令REPZ和字符比较指令CMPSB,逐字符比较,若发现不等,则结束比较输出“N”;若相等则比较下一字符直到字符串结束。 【程序框图】
7
相关推荐: