摘要:一、汇编语言中,为什么SI和DI不能同时使用汇编其实你可以想一下,这两个寄存器的意思,SI源变址寄存器,DI目地变址寄存器,既然是变址寄存器,那么他们肯定是在某个地址的基础上进行偏移变化,由此我们就得出了需要基址寄存器。你要是把这两个寄存器同时使用,那你地址变化的基址都没有,你该怎么变化呢?你在谁的基础上变化(也就是地址偏移)?对于这些汇编中的规定,其实有时并不需要书上详细的介绍,我们都应该可以从中推导出这些规则,书上的那些介绍个人认为只是用来验证我们的推测的。或是对我们所掌握的知识的进行检测,用来说明我们所掌握的是对的!1:数据寄存器,一般称之为通用寄存器组 8086 有8个8位数据寄存器, 阅读全文
汇编语言之寄存器使用bx si di bp
2012-05-29 22:35 by youxin, 1148 阅读, 1 推荐, 收藏,
摘要:这里对这几个寄存器总结一下。通用寄存器的主要用途寄存器的分类寄存器主 要 用 途通用寄存器数据 寄存器AX乘、除运算,字的输入输出,中间结果的缓存AL字节的乘、除运算,字节的输入输出,十进制算术运算AH字节的乘、除运算,存放中断的功能号BX存储器指针CX串操作、循环控制的计数器CL移位操作的计数器DX字的乘、除运算,间接的输入输出变址寄存器SI存储器指针、串指令中的源操作数指针DI存储器指针、串指令中的目的操作数指针变址寄存器BP存储器指针、存取堆栈的指针SP堆栈的栈顶指针指令指针IP/EIP标志位寄存器Flag/EFlag32位CPU的段寄存器16位CPU的段寄存器ES附加段寄存器CS代码段 阅读全文
编写不会产生除法溢出的子程序
2012-05-29 22:20 by youxin, 322 阅读, 0 推荐, 收藏,
摘要:divdw: 不溢出除法,被除数为dword,除数为word,结果为dword;参数:(dx):(ax)=被除数高、低16位(cx)=除数;返回:(dx):(ax)=结果的高、低16位(cx)=余数h,L表示被除数H的高16位和低16位,int(h/n)取商,rem(h/n)取余。n代表除数.采用公式:x/n=int(h/n)*65536+[rem(h/n)*65536+L]/n即:int(h/n)作高16位, rem(h/n)做被除数高16位,L做低16位,除以n 的结果做 低16位。最开始相当很复杂,答案很简单:assume cs:codecode segmentst... 阅读全文
汇编语言注释标记符
2012-05-29 21:40 by youxin, 5179 阅读, 0 推荐, 收藏,
摘要:最常用的单行注释符号;分号 多行注释:可以用 comment 语句来成块注释掉的: comment /* 1 2 content 3 .... */Masm 的语法是 comment 语句后的首个非空格字符起到下一个该字符止均为注释内容. 上面就是用 '/ ' 字符来作为注释分隔符的. 以 /* .... */ 的形式出现, 只是为了和 c 类似。可以用别的。 阅读全文
编写在显存中显示字符串的子程序
2012-05-29 20:58 by youxin, 429 阅读, 0 推荐, 收藏,
摘要:第十章 实验十 练习1; 子程序描述; 名称:show_str; 功能:指定位置,用指定颜色,显示一个用0结束的字符串; 参数:(dh) = 行号(0--24),(dl) = 列号(0--79);(cl) = 颜色,ds:si 指向字符串的首地址; 返回:无assume cs:code, ds:datadata segment db 'Welcome to masm', 0data endscode segmentstart: mov ax, data mov ds, ax mov dh, 8 mov dl, 3 mov cl, 2 mov si, 0 call show_st 阅读全文
masm mov指令不支持 内存到内存的转移
2012-05-29 20:46 by youxin, 750 阅读, 0 推荐, 收藏,
摘要:mov byte ptr es:[bx+di],ds:[bx+si]编译报错,原因是mov指令规定。两个操作数不能都是存储器–------传送指令很灵活,但主存之间的直接传送却不允许• 8086指令系统不允许两个操作数都是存储单元(除串操作指令),要实现这种传送,可通过寄存器间接实现mov ax , buffer1;ax←buffer1(将buffer1内容送ax)mov buffer2 , ax;buffer2←ax;这里buffer1和buffer2是两个字变量、;实际表示直接寻址方式段寄存器的操作有一些限制 –----段寄存器属专用寄存器,对他们的操作能力有限• 不允许立即数传送给段寄. 阅读全文
转:cmd和command的区别
2012-05-28 18:08 by youxin, 1395 阅读, 0 推荐, 收藏,
摘要:cmd:命令提示符(命令提示行),Cmd则是win2000或更高版的系统中新增的功能,表面看来是一样,但cmd比command功能要强大得多CMD 命令提示符可以当作是 Windows 的一个附件, Ping,Convert 这些不能在图形环境下使用的功能 要借助它来完成。command::DOS命令解释器(command 是精简dos. )。Command 调用的则是系统内置的 NTVDM,一个 DOS 虚拟机。它完全是一个类似 Virtual PC 的虚拟环境,和系统本身联系不大。cmd和command最明显的区别:cmd支持中文,而command只能支持8.3规则。注:8.3规则:8.3 阅读全文
汇编语言debug常用调试 命令详解
2012-05-28 13:33 by youxin, 4863 阅读, 0 推荐, 收藏,
摘要:显示修改寄存器命令RR;★显示所有寄存器和标志位状态;★显示当前CS:IP指向的指令。显示标志时使用的符号:标志 标志=1 标志=0OF OV NVDF DN UPIF EI DISF NG PLZF ZR NZAF AC NAPF PE POCF CY NC显示命令D① D [地址]② D [范围]如不指定范围,一次显示8行×16个字节。-D ;默认段寄存器为DS,当前偏移地址-D DS:100 / -D CS:200-D 200:100-D 200;200为偏移地址,默认段寄存器DS-D DS:100 110/ -D 100 L 10修改命令E① E 地址 ;从指定地址开始,修改 阅读全文
汇编程序运行的过程
2012-05-28 13:23 by youxin, 956 阅读, 0 推荐, 收藏,
摘要:DOS中有一个程序command.com,这个程序在DOS中称为命令解释器,也就是DOS系统的shell. DOS启动时,先完成其他重要的初始化工作,然后运行command.com,command,com运行后,执行其他相关任务后,在屏幕上显示出由当前盘符和当前路径级成的提示符。用户可以输入所要执行的命令。这些命令由command执行,command执行完这些命令后,再次显示提示符,等用户的输入。 如果用户想执行一个程序时,则输入该程序的可执行文件的名称,command首先根据文件名找到可执行文件,然后将这个可执行文件中和程序加载入内存,设置CS:IP指向程序的入口。此后,command... 阅读全文
转:c/c++里的 堆区 栈区 静态区 文字常量区 程序代码区
2012-05-28 00:06 by youxin, 551 阅读, 0 推荐, 收藏,
摘要:任何一个运行中的程序,在内存中都被分为代码区和数据区2部分,而数据区又被分为静态存储区,栈区等等。一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)—由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 栈(stack):是自动分配变量,以及函数调用所使用的一些空间(所谓的局部变量),地址由高向低减少; 堆(heap):由malloc,new等分配的空间的地址,地址由低向高增长(程序员释放)。2、堆区(heap) —一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式... 阅读全文
浙公网安备 33010602011771号