- nicehost
-
(1)BEGIN: IN AL,5FH ;从5F端口读取一个8位二进制数据放入AL中
TEST AL,80 ;比较AL最高位是否是1
JZ NEGATIVE ;如果不是1就跳转到NETATIVE,让AH最高位都置1
MOV AH,0 ;如果是AL最高位为1说明AL是负数,AH=0
JMP STOP ;跳转到STOP
NEGaTIVE:MOV Ah,0FFH ;AH都为1
STOP: HLT ;HLT使CPU静止,进入不读取指令,不写数据状态
(2)STRAT: IN AL,20H ;从20端口读取数据放入AL
MOV BL,AL ;将AL保存到BL
IN AL,30H ;从30端口读取数据
MOV CL,AL ;将AL数据保存到CL,作为循环的次数
MOV AX,0 ;AX清零
REPEAT:ADD AL,BL ;这里开始将BL和AL相加,实际在循环中就是累加
ADC AH,0 ;得到进位
DEC CL ;CL递减
JNZ REPEAT ;如果CL为0就退出循环,非零则循环,实现累加
HLT ;(同上个程序)
- cloudcone
-
1)BEGIN: IN AL,5FH ;把端口5FH(接口部分的寄存器)的内容读到CUP中的AL寄存器
TEST AL,80 ;检测AL是否为80,这里应该是80H吧,判断符号位嘛
JZ NEGATIVE ;是就跳到NEGATIVE
MOV AH,0 ;AH清零
JMP STOP ;停止
NEGaTIVE:MOV Ah,0FFH ;-1的补码给AH
STOP: HLT ;CPU停止工作
功能:检测5FH端口内容是否为负
(2)STRAT: IN AL,20H ;把端口20H的内容读到AL
MOV BL,AL ;把读到的数值存到BL
IN AL,30H ;把端口30H的内容读到AL
MOV CL,AL ;把读到的数值存到CL
MOV AX,0 ; AX清零
REPEAT:ADD AL,BL ;加20H端口的内容
ADC AH,0 ;带进位相加
DEC CL ;计数次数
JNZ REPEAT ;重复
HLT
功能:实现端口20H的内容和端口30H的内容相乘,20H端口的内容为被乘数,实现的方法是端口20H的内容自己加自己,一直加CL(端口30H内容)次
- gitcloud
-
ASSUME CS:CODES,DS:DATAS,SS:STACKS
DATAS SEGMENT
BUF1 DB 100 DUP(0)
BUF2 DB 100 DUP(0)
WAR1 DB "MATCH!$"
WAR2 DB "NO MATCH!$"
DATAS ENDS
STACKS SEGMENT
DW 8 DUP(0)
STACKS ENDS
CODES SEGMENT
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV SS,AX
MOV SP,16
MOV DX,OFFSET BUF1
MOV BX,DX
MOV BYTE PTR DS:[BX],80 ;设置缓冲区最大容量
MOV AH,0AH
INT 21H ;输入第一个字符串
MOV AH,2
MOV BH,0
MOV DH,1
MOV DL,0
INT 10H ;置光标在第二行第一列
MOV DX,OFFSET BUF2
MOV BX,DX
MOV BYTE PTR DS:[BX],80
MOV AH,0AH
INT 21H ;输入第二个字符串
MOV AL,BUF1[1]
CMP AL,BUF2[1]
JE NUMEQUAL
JMP NOMATCH
NUMEQUAL:
MOV CL,BUF1[1]
MOV CH,0
MOV BX,0
S:MOV AL,BUF1[BX+2]
CMP AL,BUF2[BX+2]
JNE NOMATCH
INC BX
LOOP S ;循环检测
MATCH:
MOV DX,OFFSET WAR1
JMP RESULT
NOMATCH:
MOV DX,OFFSET WAR2
RESULT:
PUSH DX
MOV AH,2
MOV BH,0
MOV DH,2
MOV DL,0
INT 10H ;置光标到第三行第一列
POP DX
MOV AH,9
INT 21H ;显示结果
MOV AH,4CH
INT 21H
CODES ENDS
END START
- LocCloud
-
1)BEGIN: IN AL,5FH
TEST AL,80
JZ NEGATIVE
MOV AH,0
JMP STOP
NEGaTIVE:MOV Ah,0FFH
STOP: HLT
(2)STRAT: IN AL,20H
MOV BL,AL
IN AL,30H
MOV CL,AL
MOV AX,0
REPEAT:ADD AL,BL
ADC AH,0
DEC CL
JNZ REPEAT
HLT
- 贝贝
-
(1)BEGIN: IN AL,5FH ;BEGIN是标号,可以不要,从5F端口读取一个8位二进制数据放入AL中
TEST AL,80
JZ NEGATIVE ;TEST 相当与运算,结果只影响标志位,不存储最后结果;JZ判断A是否为0.合起来实现判断AL最高位是否为0,也就是判断是负数还是正数了。负数最高位为1
MOV AH,0 ;如果是AL最高位为1说明AL是负数,AH=0
JMP STOP ;跳转到STOP
NEGaTIVE:MOV Ah,0FFH ;AH都为1
STOP: HLT ;HLT使CPU静止,进入不读取指令,不写数据状态
(2)STRAT: IN AL,20H ;从20端口读取数据放入AL
MOV BL,AL ;将AL保存到BL
IN AL,30H ;从30端口读取数据
MOV CL,AL ;将AL数据保存到CL,作为循环的次数
MOV AX,0 ;AX清零
REPEAT:ADD AL,BL ;这里开始将BL和AL相加,实际在循环中就是累加
ADC AH,0 ;带进位位相加
DEC CL ;CL递减
JNZ REPEAT ;如果CL为0就退出循环,非零则循环,实现累加
HLT ;