8086汇编
朝向高处的旅途
0101
展开
-
;通过si di实现字符串复制
;通过si di实现字符串复制assume cs:codesg,ds:datasgdatasg segment db 'welcome to masm!' ;16 db '................'datasg endscodesg segmentstart: mov ax,datasg mov ds,ax mov si,0 mov di,8s:原创 2014-11-03 19:02:34 · 1047 阅读 · 0 评论 -
外中断 及 动手修改int9键盘中断例程 小例子
端口的读写端口地址范围 0~~65535命令in outin al,60h ;从60端口号读入一个字节到alout 20h,al ;将20h端口的字节输出到al中端口读写只能使用 al,ax0~255端口可以直接用立即数访问 256~~~65535端口读写时,端口号放在dx中mov dx,3f8hin al,dxout dx原创 2014-11-04 18:17:08 · 1268 阅读 · 0 评论 -
;编写安装中断7ch的中断例程 2 字符串转化为大写
;编写安装中断7ch的中断例程;功能: 将一个全是字母,以0结尾的字符串转化为大写;参数: ds:si指向字符串首地址;将data段中的字符串转化为大写;安装程序如下assume cs:code;编写实现求平方功能的程序;安装程序,将其安装在0:200处;设置中断向量表code segmentstart: mov ax,cs mov ds,ax mov si,of原创 2014-11-04 16:43:19 · 914 阅读 · 0 评论 -
8086内中断
8086的终端向量表存放在 0000:0000~0000:03FF 共1024个单元 每个中断向量4个字节高地址存放段地址,低地址存放偏移地址。8086CPU收到中断信息后,引发的中断过程。1.从中断信息中取得中断类型码2.标志寄存器入栈3.设置标志寄存器的第八文TF和第九位IF值为04.cs,ip 一次入栈6.从中断类型码m 在地址m*4和m*4+原创 2014-11-04 17:10:41 · 664 阅读 · 0 评论 -
;分析一个奇怪的程序 jmp short s
;分析一个奇怪的程序 assume cs:codesgcodesg segment mov ax,4c00h int 21hstart: mov ax,0s: nop nop mov di,offset s mov si,offset s2 mov ax,cs:[si] mov cs:[di],axs0: jmp short ss1: mov ax,0原创 2014-11-03 22:49:27 · 871 阅读 · 0 评论 -
;将data中的字符串转化为大写
;将data中的字符串转化为大写assume cs:codedata segment db 'conversation'data endscode segmentstart: mov ax,data mov ds,ax mov si,0 mov cx,12 call capital mov ax,4c00h int 21hcapital: and byte pt原创 2014-11-04 08:57:01 · 915 阅读 · 0 评论 -
条件判断je jnb
;判断data中值为8的字节个数assume ds:data,cs:codedata segmentdb 8,11,8,1,8,5,54,38data endscode segmentstart: mov ax,data mov ds,ax mov bx,0 mov ax,0 mov cx,8s: cmp byte ptr [bx],8 jne next inc a原创 2014-11-04 11:14:57 · 672 阅读 · 0 评论 -
;用7ch中断例程 完成loop指令的功能
;用7ch中断例程 完成loop指令的功能;;loop s ;:;cx=cx-1;jcxnz s;举例 在屏幕中间显示80个!assume cs:codecode segmentstart: mov ax,0b800h mov es,ax mov di,150*12 mov bx,offset s-offset se mov cx,80s: mov b原创 2014-11-04 17:06:46 · 1313 阅读 · 0 评论 -
第一个8086汇编小程序
assume cs:codesgcodesg segment mov ax,0123h mov bx,0456h add ax,bx add ax,bxcodesg endsend伪指令:1.xxx segmentxxx ends用来声明段2.end是一个汇编程序的结束标记3.assume 讲有特定用途的段和相关的段寄存器关联起来汇编指令时有原创 2014-11-02 12:48:58 · 1323 阅读 · 0 评论 -
loop
;编程计算实现2的12次方assume cs:codesgcodesg segment mov ax,2 mov cx,11 s: add ax,ax loop s mov ax,4c00h int 21hcodesg endsendloop s =》sub cx,1原创 2014-11-02 17:34:06 · 438 阅读 · 0 评论 -
;编写安装中断7ch的中断例程
;编写安装中断7ch的中断例程;功能: 求一word型数据的平方;参数 (ax)=要计算的数据;返回值 dx ,ax 中存放结果的高16位和低16位。;应用举例:求2*3456^2assume cs:code;编写实现求平方功能的程序;安装程序,将其安装在0:200处;设置中断向量表code segmentstart: ; mov ax,cs mov ds,ax原创 2014-11-04 16:32:03 · 1071 阅读 · 0 评论 -
标志寄存器相关
ZF 判断结果是否等于0 结果为0时ZF=1 结果不为0时ZF=0PF 判断结果中1的个数是否为偶数 如果1的个数为偶数 PF=1,1的个数为奇数表示PF=0SF 判断结果是否为负数CF 判断(无符号运算)是否产生进位,借位 OF 判断(有符号运算)是否产生溢出,上溢出,下溢出adc 带进位的加法 adc ax,bx ax=ax+bx+CFsbb 带借位原创 2014-11-04 11:30:01 · 541 阅读 · 0 评论 -
;用串传送指令 将data段中的第一个字符串复制到它后面的空间
;用串传送指令 将data段中的第一个字符串复制到它后面的空间assume ds:data,cs:codedata segment db 'Welcome to masm!' db 16 dup(0)data endscode segment mov ax,data mov ds,ax mov si,0 mov di,16 mov cx,16 cld r原创 2014-11-04 11:24:41 · 1029 阅读 · 0 评论 -
;将每个字母都改为大写
;将每个字母都改为大写assume cs:codesg,ds:datasgdatasg segment db 'ibm ' db 'dec ' db 'dos ' db 'vax 'datasg endscodesg segmentstart: mov ax,datasg原创 2014-11-03 19:25:32 · 640 阅读 · 0 评论 -
;改变字母大小写
;改变字母大小写assume cs:codesg,ds:datasgdatasg segment db 'BaSic' ;5 db 'iNfOrMatioN' ;11datasg endscodesg segmentstart: mov ax,datasg mov ds,ax mov bx,0 mov cx,5s: mov al,[bx] add a原创 2014-11-03 18:37:45 · 507 阅读 · 0 评论 -
一个小疑惑
为什么在xp系统上开cmd 进行debug调试 masm link 编译原创 2014-11-03 19:28:03 · 401 阅读 · 0 评论 -
div
;100001/100 100001>65535;32/16 div ;dx:ax=100001 mov dx,1 mov ax,86a1h mov bx,100 div bx;1001/100;16/8 div mov ax,1001 mov bl,100 div bl;用div计算data段中第一个数据除以第二个数据后的结果,商存在第三个数原创 2014-11-03 21:07:23 · 664 阅读 · 0 评论 -
Debug和masm对指令的不同处理
Debug和masm对指令的不同处理在Debug中 mov ax,[0] 表示将数据ds:0处的数据送入ax中但 在汇编源程序中 mov ax,[0]被编译器当做mov ax,0 来处理解决方法有两种一种是将idata 0 送入bx后用,mov ax,[bx]另一种方法是 mov ax,ds:[idata]原创 2014-11-02 17:42:54 · 540 阅读 · 0 评论 -
;计算ffff:0~ffff:b单元中的数据,结果存储在dx中
;计算ffff:0~ffff:b单元中的数据,结果存储在dx中assume cs:code code segment mov ax,0ffffh mov ds,ax mov bx,0 mov cx,0ch xor dx,dx xor ah,ah s: mov al,[bx] add dx,ax inc bx loop s mov ax,4c00原创 2014-11-02 18:04:27 · 1895 阅读 · 0 评论 -
;将每个单词的首字母改为大写
;将每个单词的首字母改为大写assume cs:codesg,ds:datasgdatasg segment db '1.file ' db '2.edit ' db '3.search ' db '4.view ' db '5.options ' db '6.help .data原创 2014-11-03 19:18:05 · 1093 阅读 · 0 评论 -
;动手制作do0程序
;动手制作do0程序assume cs:codecode segmentstart: ;do0安装程序 mov ax,cs mov ds,ax mov si,offset do0 mov ax,0 mov es,ax mov di,200h mov cx,offset do0end-offset do0 cld rep movsb ;设置中断向量0 mov原创 2014-11-04 16:11:06 · 895 阅读 · 0 评论 -
;将data中的以0结尾的字符串转化为大写 使用栈避免寄存器冲突
;将data中的以0结尾的字符串转化为大写assume cs:codedata segment db 'word',0 db 'unix',0 db 'wind',0 db 'good',0data endscode segmentstart: mov ax,data mov ds,ax mov bx,0 mov cx,4s: mov si,bx call ca原创 2014-11-04 09:14:31 · 741 阅读 · 0 评论 -
;将内存ffff:0~ffff:b单元中的数据复制到0:200~020b单元中
;将内存ffff:0~ffff:b单元中的数据复制到0:200~020b单元中assume cs:codecode segment mov cx,0ch mov bx,0s: mov ax,0ffffh mov ds,ax mov dl,[bx] mov ax,0020h mov ds,ax mov [bx],dl inc bx loop s m原创 2014-11-02 18:32:54 · 2433 阅读 · 0 评论