输入指令in、out

上传人:第*** 文档编号:31527819 上传时间:2018-02-08 格式:DOC 页数:29 大小:106.50KB
返回 下载 相关 举报
输入指令in、out_第1页
第1页 / 共29页
输入指令in、out_第2页
第2页 / 共29页
输入指令in、out_第3页
第3页 / 共29页
输入指令in、out_第4页
第4页 / 共29页
输入指令in、out_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《输入指令in、out》由会员分享,可在线阅读,更多相关《输入指令in、out(29页珍藏版)》请在金锄头文库上搜索。

1、输入指令 ININ AL,i8 ;字节输入: ALI/O 端口 i8IN AX,i8 ;字输入:ALI/O 端口 i8,AHI/O 端口 i8+1IN AL,DX ;字节输入:ALI/O 端口DXIN AX,DX ;字输入:ALI/O 端口DX ,AHI/O 端口DX+18086 用于寻址外设端口有 216 = 65536 个(64K) ,端口号为 0000H FFFFH。每个端口用于传送外设的一个字节数据。寻址前 256 个端口时,输入/输出指令可以用直接寻址,操作数 i8 即为端口号,其范围为 00H FFH。接寻址,其范围为 0000H FFFFH。输入/输出指令还分成用 AL 进行的字

2、节传送和用 AX 进行的字传送。实现字传送时,AL 与 i8 或DX端口交换,AH 与 i8+1 或DX+1 端口交换。例 2.15a:用字节输入指令从 20h 和 21h 端口输入一个字数据in al,21hmov ah,alin al,20h2.15b:用字输入指令从 20h 和 21h 端口输入一个字数据in ax,20h 例 2.15c:用 DX 间接寻址从 20h 和 21h 端口输入一个字数据mov dx,20hin ax,dxIN 指令对应 Debug 的 I 指令(DEBUG 的其他命令)IN AL, 60H ;从端口 60H 读入一个字节到 AL 中IN AX,20H;把端口

3、 20H、21H 按“高高低低 ”组成的字读入 AXMOV DX,2F8HIN AL,DX;从端口 2F8H 读入一个字节到 AL 中IN AX,DX;把端口 2F8H、2F9H 按“高高低低”组成的字读入 AXOUT 61H,AL ;把 AL 的内容输出到端口 61H 中OUT 20H,AX;把 AX 的内容输出到端口 20H、21H 中MOV DX, 3C0HOUT DX,AL;把 AL 的内容输出到端口 3C0H 中OUT DX,AX;把 AX 的内容输出到端口 3C0H、3C1H 中输出指令 OUTOUT i8,AL ;字节输出:I/O 端口 I8AL OUT i8,AX ;字输出:I

4、/O 端口 I8AL,I/O 端口 i8+1AH OUT DX,AL ;字节输出:I/O 端口DXAL OUT DX,AX ;字输出:I/O 端口DXAL,I/O 端口DX+1AH 输出指令 OUT 将 CPU 数据传送至外设。8086 用于寻址外设端口有 216 = 65536 个(64K),端口号为 0000H FFFFH。每个端口用于传送外设的一个字节数据。寻址前 256 个端口时,输入/输出指令可以用直接寻址,操作数 i8 即为端口号,其范围为 00H FFH。当寻址大于 256 的外设端口时,只能使用 DX 寄存器间接寻址,其范围为 0000H FFFFH。输入/输出指令还分成用 A

5、L 进行的字节传送和用 AX 进行的字传送。实现字传送时,AL 与 i8 或DX端口交换,AH 与 i8+1 或DX+1端口交换。例 2.16:将数据 80h 送到 3fch 端口mov dx,3fchmov al,80hout dx,alOUT 指令对应 Debug 的 O 指令(链接 DEBUG 的其他命令)各标志位含义:1、CF(进位标志) =1 算术操作最高位产生了进位或借位 =0 最高位无进位或借位(比如 cmp ah,al。及进行 ah-al 操作,不过不保存结果,只影响标志位。jnc 和 jc 即根据 cf 标志位的结果进行跳转。至于如何影响:如果减数大于被减数,此时有借位。则将

6、 cf 位置 1,否则置 0.)2、PF(奇偶标志) =1 数据最低 8 位中 1 的个数为偶数 =0 数据最低 8 位中1 的个数为奇数 3、AF(辅助进位标志) =1 D3D4 位产生了进位或借位 =0 D3D4 位无进位或借位4、ZF(零标志) =1 操作结果为 0 =0 结果不为 05、SF(符号标志) =1 结果最高位为 1(即结果为负数) =0 结果最高位为0(结果为正数) 6、OF (溢出标志) =1 此次运算发生了溢出 =0 无溢出 例如 8 位二进制数相加:1001 1100B+0001 1000B 结果为 1011 0100B 此时无进位 CF=0,PF=1,AF=1,ZF

7、=0,SF=1 ,OF=0。7、已知有几个元素存放在以 BUF 为首地址的字节存储区中,试统计其中正元素个数(汇编语言data segment ;数据段定义buf db 3,6,-3,9,-6,-8,5;定义数据num dw $-buf;存放数据个数cnt db ?;存放正数个数data endscode segment;代码段定义assume cs:code,ds:datastart:mov ax,datamov ds,axmov cx,nummov bx,offset bufxor dl,dlnext:mov al,bx ;取得数值and al,al ;影响标志位js lop ;如果是负数

8、,转 lopinc dl ;如果是正数,则 dl 加一lop:inc bx ;修改指针loop next ;循环mov cnt,dl ;保存结果mov ax,4c00hint 21hcode endsend start8、十六进制转换成十进制mov ax,amov bx,amul bxmul bxmul bxmov bx,axmov ax,5678mov dx,1234 div bxmov sp,axmov bx,amov si,2000mov cx,5mov ax,dxmov dx,0div bxmov si,dxinc sidec cxjnz 123mov ax,spmov bx,amov

9、 cx,5mov di,2010mov dx,0div bxmov di,dxinc didec cxjnz 139mov al,2014mov 2020,al mov al,2013mov 2021,almov al,2012mov 2022,almov al,2011mov 2023,almov al,2010mov 2024,almov al,2003mov 2025,almov al,2002mov 2026,almov al,2001mov 2027,almov al,2000mov 2028,almov DI,2030mov SI,2020mov dX,0009mov AL,SIa

10、dd AL,30mov DI,ALinc SIinc DI dec DXjnz 183INT 20(g100)(说明:先改数据 把 ds:2000 ds:2010 ds:2020 ds:2030 中数据清零从 a100 开始编g 用法一:rip 100g18e 表示程序执行到 18e 的上一条停止g 用法二:加一条 int 20然后 g100 )9、用汇编如何写十六进制转成十进制(比如 51H 转成十进制 81)MOV A,#51H;参数放到 AMOV B,#100DIV ABMOV BAI,A ;百位放到 BAI 内存中。MOV A,#10XCH A,BDIV AB ;A 是十位,B 是个位

11、。SWAP A ORL A,B; /A 的高四位是十位,低四位是个位。构成 BCD 码的十进制后两位。1、试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来.答案:abc: mov ah, 1int 21hcmp al,ajb stopcmp al,zja stopsub al,20hmov dl,almov ah,2int 21hjmp abcstop: ret2、编写程序,比较两个字符串 STRING1 和 STRING2 所含字符是否完全相同,若相同则显示MATCH ,若不同则显示NO MATCH.答案:datarea segmentstring1 db asfioast

12、ring2 db xcviyoafmess1 db MATCH,$mess2 db NO MATCH,$datarea endsprognam segmentmain proc farassume cs:prognam,ds:datareastart:push dssub ax, axpush axmov ax,datareamov ds,axmov es,axbegin:mov cx, string2-string1mov bx, mess1-string2cmp bx,cxjnz dispnolea dx,addrlea si, string1lea di,string2repe cmps

13、bjne dispnomov ah,9lea dx,mess1int 21hretdispno:mov ah, 9lea dx, mess2int 21hretmain endpprognam endsend start3、试编写程序,要求从键盘输入 3 个 16 进制数,并根据对 3 个数的比较显示如下信息:(1)如果 3 个数都不相等则显示 0;(2)如果 3 个数中有 2 个数相等则显示 2;(3)如果 3 个数都相等则显示 3.答案:data segmentarray dw 3 dup( )data endscode segmentmain proc farassume cs:code

14、,ds:datastart:push dssub ax, axpush axmov ax,datamov ds,axmov cx,3lea si, arraybegin:push cxmov cl,4mov di,4mov dl, mov ah,02int 21hmov dx,0input:mov ah,01int 21hand al,0fhshl dx, clor dl,aldec dijne inputmov si,dxadd si,2pop cxloop begincomp:lea si, arraymov dl,0mov ax,simov bx,si+2cmp ax,bxjne nex

15、t1add dl,2next1:cmp si+4, axjne next2add dx,2next2:cmp si+4, bxjne numadd dl,2num:cmp dx,3jl dispmov dl,3disp:mov ah,2add dl,30hint 21hretmain endpcode endsend start4、已知整数变量 A 和 B,试编写完成下述操作的程序 :(1)若两个数中有一个是奇数,则将该奇数存入 A 中,偶数存入 B 中;(2)若两个数均为奇数,则两数分别加 1,并存回原变量;(3)若两个数均为偶数,则两变量不变.答案:dseg segmenta dw b dw dseg endscseg segmentmain proc farassume cs:cseg,ds:dsegstart: push dssub ax, axpush axmov ax,dsegmov ds,axbegin: mov ax,amov bx,bxor ax

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号