键盘输入的算术运算

一、 实验目的

a) 熟悉、掌握各类逻辑类指令格式及功能
b) 学会选择适合的逻辑类指令
c) 熟悉、掌握键盘输入、显示单个字符的指令
d) 实现键盘输入的算术运算

二、 实验重难点

a) 重点:试验中要用到不少逻辑类指令,所以要熟悉、掌握各
类逻辑类指令的格式及功能;试验中还需用到键盘输入和显
示单个字符的指令,所以要熟悉掌握这些指令的格式。 1、 逻辑运算指令

  1. 逻辑与运算指令 AND
    指令格式:
    AND dest,src ;(dest)<—(dest)∧(src),双目操作 规则:0∧0=0,0∧1=0,1∧0=0,1∧1=1
    其中 dest 可为 R、M.M,src 可为 R、M.M、[IMM]
    功能:对某些位清零
  2. 逻辑或运算指令 OR
    指令格式:
    OR dest,src ;(dest)<—(dest)∨(src),双目操作 规则:0∨0=0,0∨1=1,1∨0=1,1∨1=1
    其中 dest 可为 R、M.M,src 可为 R、M.M、[IMM] 功能:对特定位取 1,或进行字或字节的“或”运算
  3. 逻辑非运算指令 NOT
    指令格式:
    NOT dest ;(dest)<—(dest),单目操作 规则:0=1,1=0
    其中 dest 可为 R、M.M,不能为立即数。 功能:按位取反
  4. 逻辑异或运算指令 XOR
    指令格式:
    XOR dest,src ;(dest)<—(dest) (src) 规则:0 0=0,0 1=1,1 0=1,1 1=0 功能:使对应位变反
  5. 测试指令 TEST
    指令格式:
    TEST dest,src ;(dest)∧(src) 两个操作数相与的结果不保存,只根据其特征置条件码。目的操 作数(dest)不改变。
    功能:测试操作数的某位是否为 0 或 1
    2.逻辑移位指令
    1)逻辑左移指令 SHL(shift logical left)
    指令格式:
    SHL dest,src ;dest 中存放被移数据,src 中存放移动次 数
    其中 dest 可为 R、M.M,src 为 1 或 cl。
    2)算数左移指令 SAL(shift arithmetic left)
    指令格式:
    SAL dest,src ;同左移指令
    3)逻辑右移指令 SHR(shift logical right) 指令格式:
    SHR dest,src ;同左移指令 4)算数右移指令 SAR(shift arithmetic right) 指令格式:
    SAL dest,src ;同左移指令 5)循环左移指令 ROL(Rotate left) 指令格式:
    ROL dest, src ;同左移指令 6)循环右移指令 ROR(Rotate right) 指令格式:
    ROL dest,src ;同左移指令 7)带进位循环左移指令RCL(Rotate left through carry ) 指令格式:
    RCL dest,src ;同左移指令
    8)带进位循环右移指令 RCR(Rotate right through carry) 指令格式:
    RCR dest,src ;同左移指令 这八种指令可以分为两组:前四种为位移指令,后四种为循环位移指令。循环位移指令可以改变操作数中所有位的位置,在程序 中很有用。位移指令常常用来做乘以 2 或除以 2 的操作。其中左 移用来乘以 2,右移用来除以 2,算数位移指令用于带符号数运算,逻辑位移指令用于无符号数运算。 其中逻辑位移指令也常用来实现无符号数的高位、低位的分离。 b) 难点:各类指令的选取是至关重要,可以决定程序的可行性
    和效率;为了是程序更简洁需要用到一些模块化的子程序。 逻辑指令中源操作数的选取决定操作的成败,所以源操作数 的立即数的非常重要。逻辑位移指令的执行的操作要清楚。
  1. 逻辑指令的选取及相应的源操作数的立即数的选取实例
  1. 要求屏蔽 0、1 两位。
    可用 AND 指令并设置常数 0FCH,指令如下:
    MOV AL,0BFH
    AND AL,OFCH
    这两条指令执行的结果使(AL)=0BCH
    2)要求第5位置1
    可选用 OR 指令,立即数设置为 20H,指令如下:
    MOV AL,43H
    OR AL,20H
    这两条指令执行后,(AL)=63H
  1. 逻辑位移指令的隐含条件
  1. 移位次数
    在逻辑位移指令中的源操作数只能为 1 或 cl,当移位次数大于 1
    只能是 cl。例如:
    MOV CL,2
    SHL AL,CL
    这两条指令表示对 AL 中的数据左移两次
  2. 移位中的 CF 标志位 因为逻辑移位指令在其操作过程中每一次被移动的数(0 或 1)都 缓存在 CF 中,所以常常可以通过判断 CF 中是 0 还是 1 作为选择 条件。例如:
    SHL AL ,1
    JNC L1
    这两条指令可执行当 CF 中的数为 0 时跳转到 L1 处执行以下指令 3) 逻辑移位指令实现高低分离
    MOV AL,15H
    MOV CL,4
    SHR AL,CL
    这三条指令执行后(AL)=01H,
  1. 键盘输入单个字符及单个字符的显示
  1. 键盘输入单个字符
    指令格式:
    MOV AH,1
    INT 21H
    这两条指令可实现键盘输入单个字符并回显
    MOV AH,7
    INT 21H

    MOV AH,8
    INT 21H
    这两种指令可实现键盘输入单个字符不回显
  2. 单个字符的显示
    指令格式:
    MOV DL,ASIIC码
    MOV AH,2
    INT 21H
    MOV DL,ASIIC码;这条指令的源操作数可以是寄存器或存储器, 但其中数据必须是要显示字符对应的 ASIIC 码。
    三.程序代码
    实现由键盘输入的加法运算
data segment
str1 db "input from the keyboard off addition operation!$" str2 db "please input the two nunber between 0 to 9:$" str3 db "result of the operation:$"
x db ?
y db ?
data ends
code segment
assume cs:code,ds:data
start:mov ax,data mov ds,ax
mov dx,offset str1 call display
call crlf
lea dx,str2
call display 
call crlf 
call input 
and al,0fh 
mov x,al 
call crlf call 
input 
and al,0fh 
add al,x daa
mov y,al 
call crlf 
lea dx,str3 
call display 
mov al,y 
mov cl,4
shr al,cl
or al,30h 
call show 
mov al,y 
and al,0fh 
or al,30h 
call show 
mov ah,4ch 
int 21h
display proc
mov ah,9
int 21h
        ret
display endp
crlf    proc
mov dl,0dh 
mov ah,02h 
int 21h 
mov dl,0ah 
mov ah,02h
int 21h
ret
crlf    endp
input   proc
mov ah,1 int 21h ret
input   endp
show    proc
mov dl,al 
mov ah,02h
 int 21h 
 ret
show    endp
code  ends
end start

四.实验结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值