这是我学习汇编语言循环与分支结构的过程中总结的一些代码。
其中有参考我们老师的课件和清华大学出版社的《IBM—PC 汇编语言程序设计》。
仅供学习参考!禁止转载!
【例1】编程将内存数据段字节单元INDAT存放的一个数n(假设0≤ n ≤9 ),以十进制形式在屏幕上显示出来。
例如,若INSTR单元存放的是数8,则在屏幕上显示:8D。
思路:首先需要数据段里定义一个DB类型的10进制数,然后初始化寄存器,取操作数,将他转化为ASCII码,再利用2号DOS功能,显示字符‘D’。
代码:
DATA SEGMENT ;数据段定义 INDAT DB 8 DATA ENDS CODE SEGMENT ;代码段定义 ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX ;初始化DS MOV DL,INDAT OR DL,30H MOV AH,2 INT 21H MOV DL,'D' MOV AH,2 INT 21H MOV AH,4CH ;返回DOS窗口 INT 21H CODE ENDS END START
【例2】编写程序段,求AX中存放的带符号数的绝对值,结果存RES单元。
代码:
data segment res dw ? data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov ax,9a00H cmp ax,0 jge isp neg ax isp: mov res,ax mov ah,4ch int 21h code ends end start
【例3】编程判断DAT单元存放的带符号数的正负。
如该数为负数,则显示“DAT is a negative number!”;否则显示“DAT is a nonnegative number!”。
代码:
DATA SEGMENT ;数据段定义 N DB 'DAT is a negative number!','$' NN DB 'DAT is a nonnegative number! $' DATA ENDS CODE SEGMENT ;代码段定义 ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX ;设置DS MOV AX,-3 CMP AX,0 JGE ISNN LEA DX,N MOV AH,9 INT 21H JMP FINISH ISNN: LEA DX,NN MOV AH,9 INT 21H FINISH: MOV AH,4CH INT 21H CODE ENDS END START
【例4】 编程求分段函数Y的值。已知变量X为16位带符号数,分段函数的值要求保存到字单元Y中。
函数定义如下:当x=0时,Y=0,当x大于0时,Y=1,当x小于0的时候,Y=-1。
代码:
DATA SEGMENT ;数据段定义 X DW -128 Y DW ? DATA ENDS CODE SEGMENT ;代码段定义 ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,X CMP AX,0 JG ISPN JZ ISZN MOV Y,-1 JMP FINISH ISPN: MOV Y,1 JMP FINISH ISZN: MOV Y,0 FINISH: MOV AH,4CH INT 21H CODE ENDS END START
【例5】 编程显示以“!”结尾的字符串。
如:“Welcome to MASM!”。
代码:
DATA SEGMENT MYSTR DB 'Welcome to MASM!' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,MYSTR next: mov dl,[si] cmp dl,'!' jz finish mov ah,2 int 21h inc si jmp next finish: mov dl,'!' mov ah,2 int 21h mov ah,4ch int 21h code ends end start
【例6】 将内存数据段INSTR地址开始存放的一个由字母组成的字符串中的小写字母全部转换成大写字母(其余字符不变)后存至内存数据段OUTSTR地址处。
如原字符串是“welcome to MASM!”,那么转换完后应该是“WELCOME TO ASM!”。
代码:
DATA SEGMENT INSTR DB 'welcome to MASM!' STRLEN EQU $-INSTR OUTSTR DB STRLEN DUP(?),13,10,’$’ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,INSTR LEA DI,OUTSTR MOV CX,STRLEN NEXTCHAR: MOV AL,[SI] CMP AL,'a' JB UNCHG ;不是小写字母,则不转换 CMP AL,'z' JA UNCHG ;不是小写字母,则不转换 SUB AL,20H ;将小写字母转换为大写字母 UNCHG: MOV [DI],AL INC SI INC DI LOOP NEXTCHAR MOV AH,4CH INT 21H CODE ENDS END START