jhanker 发表于 2020-7-16 16:44:18

程序目的是调用dos中断在屏幕上显示:(A)=10011010B

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

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;程序结束
页: [1]
查看完整版本: 程序目的是调用dos中断在屏幕上显示:(A)=10011010B