汇编6

div指令

1.除数:有8位和16位两种,在一个寄存器或者内存中。

2、被除数:默认放在AX或(DX和AX)中,如果除数为8位,被除数为16位,被除数默认在AX中存放,
如果除数为16位,被除数为32位,被  除数则在(DX和AX)中存放,DX存放高16位,AX存放低16位。

题目1

assume cs:code, ds:data
data segment
db ‘a‘  ;8位
dw 100  ;16位
dd 100006  ;32位
data ends

code segment

start:
mov ax,data
mov ds, ax

mov ax,500
mov bx,0
div byte ptr[bx]    ; 500/97 =5...15, al保存商, ah保存余数

;mov ax,86A1h   ;设置被除数 100001 == 186A1h
;mov dx,1
;div word ptr[bx+1]  ;执行后 ax保存商, dx保存余数

mov ax,word ptr[bx+3]  ;设置被除数
mov dx,word ptr[bx+5]
div word ptr[bx+1]  ;执行后 ax保存商, dx保存余数

mov ax,4c00h
int 21h
code ends
end start

题目2
1982年关于DEC公司的一条记录:
公司名称:DEC
总裁姓名:Ken Olsen
排    名:137
收    入:40
著名产品:PDP

1988年DEC公司的信息有了变化:
1.Ken Olsen 在富翁榜上的排名已升至38位;
2.DEC的收入增加了70亿美元;
3.该公司的著名产品已变为VAX系列计算机。
任务:编程修改内存中的过时数据。

c语言代码

struct company
{
 char cn[30];
 char rn[30];
 int num;
 int sr;
 char cp[30];
}
struct company aa={"DEC", "Ken Olsen", 130, 40, "PDP"};
void main()
{
 aa.num = 38;
 aa.sr = 110;
 aa.cp[0] = ‘V‘;
 aa.cp[1] = ‘A‘;
 aa.cp[2] = ‘X‘;
}

汇编代码
assume cs:code, ds:data
data segment
db ‘DEC‘,‘Ken Olsen‘
dw 130,40
db ‘PDP‘
data ends

code segment
start:
mov ax,data
mov ds,ax
mov bx,12
mov word ptr[bx], 38
add word ptr[bx+2], 70
mov byte ptr[bx+4], ‘V‘
mov byte ptr[bx+5], ‘A‘
mov byte ptr[bx+6], ‘X‘
mov ax,4c00h
int 21h
code ends
end start

时间: 2024-10-20 10:22:20

汇编6的相关文章

GCC在C语言中内嵌汇编 asm __volatile__ 【转】

转自:http://blog.csdn.net/pbymw8iwm/article/details/8227839 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作. 1.简单的内嵌汇编 例: __asm__ __volatile__("hlt"); "__asm__"表示后面的

Linux C中内联汇编的语法格式及使用方法(Inline Assembly in Linux C)

在阅读Linux内核源码或对代码做性能优化时,经常会有在C语言中嵌入一段汇编代码的需求,这种嵌入汇编在CS术语上叫做inline assembly.本文的笔记试图说明Inline Assembly的基本语法规则和用法(建议英文阅读能力较强的同学直接阅读本文参考资料中推荐的技术文章 ^_^). 注意:由于gcc采用AT&T风格的汇编语法(与Intel Syntax相对应,二者的区别参见这里),因此,本文涉及到的汇编代码均以AT&T Syntax为准. 1. 基本语法规则 内联汇编(或称嵌入汇

汇编第五日

mov ax, offset 标号:取得标号相对于伪代码后第一条指令地址0的相对偏移量即标号地址 可以发现汇编指令中的idata会直接反映在机器码中 jmp指令可以修改IP或CS和IP的值,具体格式如下: ①jmp short 标号(段内转移) (IP) = (IP)+ 8位位移 8位位移含义是:标号地址减去jmp指令的下一条指令地址即为相对位移地址(可正可负,但是范围必须在8位数据能表示之内)并不是直接目的地址 8位位移范围为-128 - 127 例如: JMP 0008即跳到0BBD:000

在vs 2015环境下,c语言和汇编混编操作简析(更新中......)

在VS 2015环境下如何混编. 在新建工程里也会发现了很多问题, 应用程序类型分为:windows应用程序,控制台应用程序,DLL,静态库 静态库: 静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为"库"文件:在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库. 程序编译一般需经预处理.编译.汇编和链接几个步骤.静态库特点是可执行文件中包含了库代码的一份完整拷贝:缺点就是被多次使用就会有多份冗余拷贝. 静态库和动态库是两种共享程序

用汇编来解释“计算机是怎么工作的”

本文章为<Linux内核分析>实验报告 梁永锐 原创作品转载请注明出处 http://www.cnblogs.com/liangyongrui/p/6392035.html <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 " ----- 以下为要分析的c代码 int g(int x) { return x + 36; } int f(int x) { return g(x) * 4; }

Java千百问_02基本使用(015)_java如何通过汇编方式运行

点击进入_更多_Java千百问-基本使用 1.java如何通过汇编方式运行 java本身不能通过汇编方式运行.但是,我们可以通过某些插件,在运行中将java代码解释为汇编指令,让我们能够通过分析执行的汇编指令来查找一些问题,也可以帮助我们分析和理解JVM是如何解释和编译的(当然java本身的编译和运行和汇编无关). PrintAssembly是JVM的一个运行参数,它允许我们获取在控制台打印java代码翻译成的汇编指令.使用PrintAssembly需要一些插件的支持,这些并不是JVM直接提供的

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 选择调用的进程为 24 i386 getuid sys_getuid1647 i386 getgid sys_getgid16 使用库函数API方式 使用C代码中嵌入汇编代码方式

汇编速查表

指令 功能 AAA 调整加 AAD 调整除 AAM 调整乘 AAS 调整减 ADC 进位加 ADD 加 AND 与 ARPL 调整优先级 BOUND 检查数组 BSF 位右扫描 BSR 位左扫描 BSWAP 交换字节 BT 位测试 BTC 位测试求反 BTR 位测试清零 BTS 位测试置一 CALL 过程调用 CBW 转换字节 CDQ 转换双字 CLC 进位清零 CLD 方向清零 CLI 中断清零 CLTS 任务清除 CMC 进位求反 CMOVA 高于传送 CMOVB 低于传送 CMOVE 相等

RT-11SJ 环境下运行pdp11汇编MACRO-11

一.在simh下运行RT-11SJ 1:安装simh:win下直接安装,linux下make后在BIN目录找到pdp11并cp到搜索路径目录下 2:到http://simh.trailing-edge.com/software.html 下载RT-11 V4 for the PDP-11 的镜像磁盘文件rt11swre.tar.Z并解压,在Disks目录下可得到镜像文件rtv4_rk.dsk 3:建立运行目录rt11swre,把rtv4_rk.dsk移到该目录 4:建立simh启动文件boot.

汇编写文件

下面的代码直接gcc 编译.用法 ./a.out file_name msg 命令行第一个参数是文件名,第二个参数是文件的内容 下面的代码说明了在汇编里怎么使用命令行参数(主函数用main而不是以前的_start,主函数写成main用64方式可以拿到内容). 调用系统调用的方式改为64位的方式,貌类系统函数里面有指针类型的变量,32位调用方式就不行(64用syscall,32位用int 0x80 觖发系统调用). 32位系统调用编号表/usr/include/asm/unistd_32.h 64