- 已知数组A包含20个互不相等的字型整数,数组B包含30个互不相等的字型整数,试编制一程序把在A中而不在B中出现的整数放于数组C中。
DATAS SEGMENT
BUFA DW 123BH,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
ORG 40H;40H处开始存放下一条指令的数据
BUFB DW 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40
ORG 90H
BUFC DW 20 DUP(?)
ORG 100H
RST DB 4 DUP(?),0DH,0AH,'$'
DATAS ENDS
STACKS SEGMENT
DB 256 DUP(?)
STACKS ENDS
;BUFA中每一个数字与BUFB全部数字循环比较
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
LEA SI,BUFA ;源字符串
LEA DI,BUFC ;操作的字符串
MOV CX,20
L1:
CLD ;循环方向清0
LODSW ;把SI指向的存储单元读入AX,SI+2
PUSH CX ;保护寄存器CX
PUSH DI ;保护DI中的值
MOV CX,30 ;BUFB的长度
LEA DI,BUFB ;目的字符串
REPNZ SCASW ;核心指令 一直比较字如果不为0
POP DI
POP CX
JZ SAME
STOSW;将AX存储到地址ES:DI
SAME:
LOOP L1
MOV SI,0 ;准备输出
MOV CX,20
;传统艺能循环着把数输出
PRINT:
PUSH CX;保护我方CX
MOV CL,4
MOV CH,4
MOV DI,0
MOV BX,BUFC[SI];BUFC中的数据取出来打印
MOVE:
ROL BX,CL ;循环同一个BUFC,循环左移位数存放在CL中;比如打印1234
MOV AL,BL ;变为2341[AL] = 41
AND AL,0FH ; 41H AND 0FH = 01相当于把1取处出来
OR AL,30H ;转换为数字对应的asc码
CMP AL,39H ;39h '9'
JBE L2 ;打印出数字
ADD AL,7
;'A' A + 7 = 10 + 7 = 17 = 11H字母的专属操作 + 30H为41H'A'
L2:
MOV RST[DI],AL ;DI = 0
INC DI ;准备打印第二个字符
DEC CH ;影响ZF值
JNZ MOVE
;固定写法输出4个字节的数据第一个不相同的数字
LEA DX,RST
MOV AH,09H
INT 21H
POP CX
ADD SI,2
LOOP PRINT;CX = 20接下来会有0000不要在意这些细节想改可以改
MOV AH,4CH
INT 21H
CODES ENDS
END START
- 结果
- 解释DEC指令
今天的文章使用汇编完成下列c的数组赋值_int最大值65535分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/83931.html