鱼C论坛

 找回密码
 立即注册
查看: 2670|回复: 0

[技术交流] 程序目的是调用dos中断在屏幕上显示:(A)=10011010B

[复制链接]
发表于 2020-7-16 16:44:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
;程序目的是调用dos中断在屏幕上显示:(A)=10011010B
DATA  SEGMENT ;数据段
           A DB        10011010B;以A为标志的代码段偏移地址内容初始化为二进制10011010用十六进制就是 9AH 00H 两个字节
           B DB        '(A)=;以B为标志的代码段偏移地址内容初始化为字符串'(A)=''为字符串结束标志
           C1 DB        'B',0DH,0AH,';以C为标志的代码段偏移地址内容初始化为字符串'B',回车,换行,'为字符串结束标志
DATA  ENDS;数据段结束

STACK1 SEGMENT;堆栈段
              DB        200 DUP(0);开辟200个双字节存空间
STACK1 ENDS;堆栈段结束

CODE SEGMENT;代码段
ASSUME    DS:DATA,SS:STACK1,CS:CODE;把段名为DATA的段声明为数据段,把段名为STACK1的段声明为堆栈段,把段名为CODE的段声明为代码段

;代码段开始
      START:  MOV       AX,DATA;把数据段地址传给AX寄存器
              MOV       DS,AX;让DS寄存器保存数据段地址
              LEA       DX,B;把以B为标志的代码段偏移地址传给DX寄存器
              MOV       AH,09H;09传给AH
              INT       21H;调用中断,结合上一句,作用:在屏幕上显示以DX寄存器内容为初始地址的字符串,到'为字符串结束标志
              MOV       BL,A;把以A为标志的代码段偏移地址内容10011010(二进制)传给BX寄存器的低段
              MOV       CL,8;初始化CL为8,为了循环8次,因为
       NEXT:  MOV       DL,0;初始化DL
              SAL       BL,1;把BL算数左移一位,相当于把最高位放入 CF(标志寄存器的进位标志位)
              RCL       DL,1;把全0的DL寄存器带CF循环左移,相当于把把BL的最高位从CF给DL最低位,同时CF清0
              ADD       DL,30H;对DL加上30H,相当于把数字转化为ASCII
              MOV       AH,2;02传给AH
              INT       21H;调用中断,结合上一句,作用:在屏幕上显示以DL寄存器内容ASCII的字符
              DEC       CL;CL值减1
              JNE       NEXT;CL值不为0转到NEXT标识的语句
              LEA       DX,C1;把以C为标志的代码段偏移地址传给DX寄存器
              MOV       AH,09H;09传给AH
              INT       21H;调用中断,结合上一句,作用:在屏幕上显示以DX寄存器内容为初始地址的字符串,到'为字符串结束标志
              MOV       AH,4CH;4CH传给AH
              INT       21H;调用中断,结合上一句,作用:返回操作系统

CODE ENDS;代码段结束
END       START;程序结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 23:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表