|
发表于 2018-3-3 08:14:24
|
显示全部楼层
按照你的理解,计算的应该是 0000 0001+0000 0001
请看下面的程序
输入 2 空格 3
- assume cs:code, ds:data, ss:stack
- stack segment
- db 100h dup (0)
- stack_top:
- stack ends
- data segment
- num0 db 0
- num1 db 0
- data ends
- code segment
- start:
- mov ax, stack
- mov ss, ax
- mov sp, stack_top
- mov ax, data
- mov ds, ax
- mov ax, 0b800h
- mov es, ax
-
- mov ah, 01h
- int 21h ; 键盘中断,读取一个字符
- sub al, '0' ; 从键盘读取到的是字符,字符减 ‘0’,也就是减 30h,转换成数字
- mov byte ptr [num0], al ; 被加数
-
- mov ah, 01h
- int 21h ; 键盘中断,读取一个字符(空格),直接忽略
-
- mov ah, 01h
- int 21h ; 键盘中断,读取一个字符
- sub al, '0' ; 从键盘读取到的是字符,字符减 ‘0’,也就是减 30h,转换成数字
- mov byte ptr [num1], al ; 加数
-
- mov al, byte ptr [num0]
- add al, byte ptr [num1] ; 被加数 + 加数,现在 ax 中是两个数的和
-
- add al, '0' ; 把这个和加 ‘0’,也就是加 30h,转换成字符,用于下面显示
- mov ah, 07h ; 字符属性
- mov es:[160 * 10], ax
-
-
- mov ax, 4c00h
- int 21h
- code ends
- end start
复制代码 |
|