汇编基础教程(2)汇编指令
汇编指令
1 汇编指令不区分大小写
2 在进行数据传送或者运算时,要注意指令的两个操作对象的位数应当是一致的
3 类型
3.1 基础运算指令
mov指令的几种形式:
mov 寄存器,数据
mov 寄存器,寄存器
mov 寄存器,内存单元
mov 内存单元,寄存器
...
汇编基础教程(4)段
段
1 将一段内存定义为一个段,用一个段地址指示段,用偏移地址访问段内的单元
2 种类
2.1 代码段
定义
对于8086PC机,在编程时,可以根据需要,将一组内存单元定义为一个段。
可以将长度为 N( N≤64KB )的一组代码,存在一组地址连续、起始地址为 16的倍数的内存单元中,这段内存是用来存放代码的,从而定义了一个代码段。
...
汇编基础教程(5)程序编写
程序
1 源程序
1.1 构成
寄存器与段的关联假设
assume:含义为“假设”。
它假设某一段寄存器和程序中的某一个用 segment … ends 定义的段相关联。
通过assume说明这种关联,在需要的情况下 ,编译程序可以将段寄存器和某一个具体的段相联系。
标号
一个标号指代了一个地址。
codesg:放在segment的前面,...
汇编语言实现功能(1)用循环累加实现乘法
问题1:编程计算2的2次方,结果存在ax中
分析:用2+2实现
assume cs:code
code segment
mov ax,2
add ax,ax
;实现程序的返回
mov ax,4c00h
int 21h
code ends
end
问题2:编程实现2的12次方
分析:用loop实现
assume cs:code
code segment
...
汇编语言实现功能(2)数据复制的实现
问题1:将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中
分析
1、0:200~0:20b单元如何表示
0020:0~0020:b可以等同于以上单元,而且单元的偏移地址是从0开始,和需要复制的单元相同
2、单元中的数据能直接进行复制转移吗
不可以,需要用寄存器进行中转
assume cs:code
code segment
;做法一
;----------...
汇编语言实现功能(3)大小写的转换
问题1:将data段中的第一个字符串转换成大写,第二个字符串转换成小写
分析:
如何转换成大小写
如果利用ASCII码进行转换的话,需要判断该字符是大写还是小写,汇编语言实现太过困难,可以对字符串的二进制进行分析。
在ASCII码中,大写字母的第五位为0,小写字母的第五位为1,可以对位取反进行大小写转换
assume cs:code,ds:data
data segment
db 'B...
汇编语言实现功能(4)显示功能
问题1:在屏幕中间分别显示绿底,绿底红色,白底蓝色的字符串“Welcome to masm!”
分析:
1 如何确定字符要显示的位置
在80*25的彩色字符模式显示缓冲区在内存地址的B8000H~BFFFFH共32KB的空间中
在该模式下,显示器可以显示25行,80列
所以在一行中就有80个字符,共占据160个字节,每个字符低位字节存储字符的ASCII码,高位字节存储字符的颜色属性
偏...
c实现功能(1)冒泡排序
#include <stdio.h>
int main() {
int array[10] = { 0,5,3,2,4,1,6,9,8,7 };
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10 - 1 - i; j++) //减1是为了防止数组越界
{
if (array[j] &gt...
c实现功能(2)汉字逆置
#include <stdio.h>
int main() {
char str[10] = "你好啊";
//获得数组的长度
int len = 0;
while (str[len++]);
len--;
//由于汉字是两个字节,所以要分开进行置换
int min = 0;
int max = len - 1;
while (min < max) {
...
c实现功能(3)去掉字符串左右的空格
#include <stdio.h>
int main() {
//去掉右边的字符串空格
char str[100] = "hello world ";
int len = 0;
while (str[len++]);
len--;
//printf("%d\n", len);
for (int i = len - 1; i >= 0;...
c实现功能(4)产生随机数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
time_t tm = time(NULL);//利用时间作为种子
srand(tm);//要使rand函数得到的每次结果不同,就需要srand中的种子不同
for (int i = 0; i < 10...
c实现功能(5)字符串和数字之间的转换
#include <stdio.h>
int main() {
//实现字符串转换成数字
char str[10] = "123";
//求取字符串的长度
int len = 0;
while (str[len++]);
len--;
//设置和
int value = 0;
for (int i = 0; i < len; i++)
{
//...
C实现功能(6)递归实现整数转换成二进制
#include <stdio.h>
void binary(int num);
int main() {
//实现十进制转换成二进制
int num = 10;
binary(num);
return 0;
}
void binary(int num) {
int i = num % 2;
if (num > 0) {
binary(num / 2);
...
c实现功能(7)写入和读取文本文件
#include <stdio.h>
#include <string.h>
int main()
{
//向一个文件中写入内容
char s[1024] = {0};
//打开一个文件
FILE *p = fopen("D:\\test\\a.txt","w");
//将信息写入到文件中
while(1){
...
c实现功能(8)简单实现文本的加密
#include <stdio.h>
#include <string.h>
//实现对文件的加密函数
void encode(char *s){
while (*s) {
(*s)++;
s++;
}
}
//实现对文件内容的解密
void decode(char *s){
while (*s) {
...
c实现功能(9)对文本的内容进行排序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void swap(int *p1, int *p2){
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
//实现对数组内容的排序
void sort(int *p, int len...
c实现功能(10)对文本内容进行计算
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//实现对文本内容的计算
//首先实现对文本中每一行内容的计算
int calcString(char *s){
char num1[100] = {0};
int oper = 0;
char num2[100] =...
c实现功能(11)对二进制文件的读写
#include <stdio.h>
#include <string.h>
int main(){
//实现对二进制文件的读取
//打开文件
FILE *p = fopen("D:\\test\\a.wmv", "rb");
FILE *p1 = fopen("D:\\test\\b.wmv", "wb");
//设置字符缓冲
c实现功能(12)利用stat函数对大文件进行拷贝
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
int main(){
struct stat st = {0};
//利用stat结构体对文件的相关信息进行保存
stat("D:\\test\\a.wmv", &st);
//在堆中分配文件大小...
今日推荐
周排行