data segment ;显示提示语句 string_1 db 'input num a: $' string_2 db 0ah,0dh,'input num b: $' string_3 db 0ah,0dh,'a or b= $' data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax ;显示提示 lea dx,string_1 mov ah,09h int 21h ;读取第一个数 mov ah,01h ;DOS调用:从键盘输入 int 21h cmp al,39h ;和9相比 ja a1 ;大于9跳转A1 sub al,30h ;AL -30h跳转A jmp a a1: sub al,57h ;AL减去57H a:mov bl,al lea dx,string_2 mov ah,09h int 21h ;读取第二个数 mov ah,01h int 21h cmp al,39h ja b1 sub al,30h jmp b b1: sub al,57h b:mov cl,al lea dx,string_3 mov ah,09h int 21h xor ah,ah ;把AH清零 or cl,bl ;或运算 mov ax,cx ;把结果送给AX AAA ;把十六进制的数换成BCD码 add ah,30h ;输出高位 mov dl,ah mov ah,02h ;调用2号功能显示 int 21h ;输出结果的低位 mov ax,cx aaa add al,30h mov dl,al mov ah,02h int 21h mov ah,4ch int 21h code ends end start各代码意思
时间: 2024-04-01 09:32:41 浏览: 65
STACK1_SEGMENT_STACK.rar_STACK1 SEGMENT_stack segment stack
5星 · 资源好评率100%
这段代码是汇编语言,用于通过DOS调用从键盘输入两个数字,并对它们进行或运算,最后输出结果。下面是各行代码的意思:
- data segment: 定义数据段
- string_1 db 'input num a: $': 定义字符串变量,用于显示提示语句
- string_2 db 0ah,0dh,'input num b: $': 定义字符串变量,用于显示提示语句
- string_3 db 0ah,0dh,'a or b= $': 定义字符串变量,用于显示提示语句
- data ends: 数据段结束
- code segment: 定义代码段
- assume cs:code,ds:data: 定义代码和数据段的段寄存器
- start: 程序开始标签
- mov ax,data: 把数据段的段地址送到AX寄存器中
- mov ds,ax: 把AX寄存器中的地址送到DS寄存器中
- lea dx,string_1: 把字符串变量string_1的地址送到DX寄存器中
- mov ah,09h: 把09h送到AH寄存器中,表示DOS调用功能号为09h,用于显示字符串
- int 21h: 调用DOS中断21h,实现显示字符串的功能
- mov ah,01h: 把01h送到AH寄存器中,表示DOS调用功能号为01h,用于从键盘读取字符
- int 21h: 调用DOS中断21h,实现从键盘读取字符的功能
- cmp al,39h: 把39h和AL寄存器中的值(即读取的字符)进行比较
- ja a1: 如果大于39h,则跳转到标签a1
- sub al,30h: 把AL寄存器中的值减去30h,得到数字的值
- jmp a: 跳转到标签a
- a1: sub al,57h: 把AL寄存器中的值减去57h,得到数字的值
- a: mov bl,al: 把AL寄存器中的值赋给BL寄存器中
- lea dx,string_2: 把字符串变量string_2的地址送到DX寄存器中
- mov ah,09h: 把09h送到AH寄存器中,表示DOS调用功能号为09h,用于显示字符串
- int 21h: 调用DOS中断21h,实现显示字符串的功能
- mov ah,01h: 把01h送到AH寄存器中,表示DOS调用功能号为01h,用于从键盘读取字符
- int 21h: 调用DOS中断21h,实现从键盘读取字符的功能
- cmp al,39h: 把39h和AL寄存器中的值(即读取的字符)进行比较
- ja b1: 如果大于39h,则跳转到标签b1
- sub al,30h: 把AL寄存器中的值减去30h,得到数字的值
- jmp b: 跳转到标签b
- b1: sub al,57h: 把AL寄存器中的值减去57h,得到数字的值
- b: mov cl,al: 把AL寄存器中的值赋给CL寄存器中
- lea dx,string_3: 把字符串变量string_3的地址送到DX寄存器中
- mov ah,09h: 把09h送到AH寄存器中,表示DOS调用功能号为09h,用于显示字符串
- int 21h: 调用DOS中断21h,实现显示字符串的功能
- xor ah,ah: 把AH寄存器中的值清零
- or cl,bl: 把CL寄存器和BL寄存器中的值进行或运算,并把结果送到CL寄存器中
- mov ax,cx: 把CX寄存器中的值送到AX寄存器中
- AAA: 把AX寄存器中的十六进制数转换成BCD码,结果存放在AH和AL寄存器中
- add ah,30h: 把AH寄存器中的值加上30h,得到结果的高位
- mov dl,ah: 把AH寄存器中的值送到DL寄存器中
- mov ah,02h: 把02h送到AH寄存器中,表示DOS调用功能号为02h,用于显示字符
- int 21h: 调用DOS中断21h,实现显示字符的功能
- mov ax,cx: 把CX寄存器中的值送到AX寄存器中
- aaa: 把AX寄存器中的十六进制数转换成BCD码,结果存放在AH和AL寄存器中
- add al,30h: 把AL寄存器中的值加上30h,得到结果的低位
- mov dl,al: 把AL寄存器中的值送到DL寄存器中
- mov ah,02h: 把02h送到AH寄存器中,表示DOS调用功能号为02h,用于显示字符
- int 21h: 调用DOS中断21h,实现显示字符的功能
- mov ah,4ch: 把4ch送到AH寄存器中,表示DOS调用功能号为4ch,用于结束程序
- int 21h: 调用DOS中断21h,实现结束程序的功能
- code ends: 代码段结束
- end start: 程序结束标签
阅读全文