这部分主要介绍一下汇编语言程序的三种结构:顺序结构、分支程序结构、循环结构。
1.顺序结构(略)
2.分支结构
(1)设计一个分段函数,x>0,y=1;x=0,y=0;x<0,y=-1.
.486
DATA SEGMENT USE16
X DW ?
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AX,X
OR AX,AX ;自身异或操作不改变,改变的是标志位
JE ZERO ;如果是0的话跳转到ZERO
JNS PLUS ;如果是正数的话跳转到PLUS
MOV BL,0FFH;BL赋予初值-1
JMP HALT ;如果是负数的话跳转HALT
ZERO:MOV BL 0
JMP HALT
PLUS:MOV BL 1
HALT: MOV AH,4CH
INT 21H
CODE ENDS
END START
(2)将BX寄存器的内容以二进制的形式显示在屏幕上。
.486
CODE SEGMENT USE16
ASSUME CS:CODE;
BEG: MOV BX,3456H
MOV CX,16
MOV AL,'0'
ROL BX,1 ;左移操作
JNC NEXT ;如果是0的话,直接显示
MOV AL,'1' ;非0,显示1
NEXT: MOV AH,0EH
INT 10H
LOOP LAST
MOV AH,4CH
INT 21H
CODE ENDS
END BEG
(3)某科室9人,统计月收入在800-900间的人数,并且用十进制表示。
.486
DATA SEGMENT USE16
SALARY DW DUP(?) ;如果定义为DB,那么最多工资为FFH,也就是256,显然不符合题意
DATA ENDS
CODE SEGMENT USE16
ASSUNME DS:DATA,CS:CODE
BEGIN:MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET SALARY
MOV CX,9
MOV DL,0
AGAIN:MOV AX,[BX]
CMP AX,800
JC NEXT ;有进位,即小于800
CMP AX,900
JA NEXT
INC DL ;计数加1
NEXT: ADD BX,2 ;由于定义为DW类型,所以+2
LOOP AGAIN
ADD DL,30H ;由于要求十进制显示
MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
3.循环结构
(1)求1-10的累加和
.486
DATA SEGMENT USE16
SUM DW ?
DATA ENDS
CODE SEGMENT USE16
ASSUME DS:DATA,CS:CODE
START PORC FAR
BEGINN:PUSH DS
XOR AX,AX
PUSH AX ;AX为0
MOV AX,DATA
MOV DS,AX
MOV CX,10
MOV AX,0
AGAIN:ADD AC,CX
LOOP AGAIN
MOV SUM,AX
RET
START ENDP
CODE ENDS
END BEGIN
(2)从BUF单元开始为1个ASCII码字符串,找到其中最大的送到屏幕显示