汇编语言 编程题 您所在的位置:网站首页 延时程序汇编语言怎么写 汇编语言 编程题

汇编语言 编程题

2023-07-03 08:06| 来源: 网络整理| 查看: 265

编程实现求10个字数据中的最大值放在MAX单元中 DATA SEGMENT ARR DW 12, 45, 67, 23, 9, 56, 81, 37, 52, 19 MAX DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX ; 设置数据段寄存器 MOV AX, 0 ; 将最大值初始化为0 MOV CX, 10 ; 迭代次数,即数据的总个数 LEA SI, ARR ; 将数组的地址加载到SI寄存器中 ; 循环比较每个元素 LOOP_START: MOV BX, [SI] ; 将当前元素加载到BX寄存器 ; 判断当前元素是否大于最大值 CMP BX, AX JLE NOT_MAX ; 如果不大于最大值,跳转到NOT_MAX标签 ; 如果大于最大值,则将当前元素赋值给最大值 MOV AX, BX ; 更新最大值的内存位置 LEA DI, MAX MOV [DI], AX NOT_MAX: ADD SI, 2 ; 递增SI寄存器以指向下一个元素 LOOP LOOP_START ; 循环 MOV AX, 4C00H ; 程序退出 INT 21H CODE ENDS END START 数据段M、N两个单元中存放了两个整数,试编写程序实现:

① 当M、N中一个奇数一个偶数时,将M单元放奇数,N单元放偶数

② 当M、N均为奇数时,数据都-1,存入原存储单元

③ 当M、N均为偶数时,都加1后放回原存贮单元

DATA SEGMENT M DW ? ; 存放M的单元 N DW ? ; 存放N的单元 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX ; 设置数据段寄存器 ; 读取M和N的值 MOV AX, M ; 将M的值加载到AX寄存器 MOV BX, N ; 将N的值加载到BX寄存器 ; 检查M和N的奇偶性并进行相应操作 TEST AX, 0001b ; 检查M的最低位,判断奇偶性 JNZ M_ODD ; 如果M为奇数,跳转到M_ODD标签 TEST BX, 0001b ; 检查N的最低位,判断奇偶性 JNZ N_EVEN ; 如果N为奇数,跳转到N_EVEN标签 ; M和N均为偶数 ADD AX, 1 ; M加1 ADD BX, 1 ; N加1 JMP STORE ; 跳转到STORE标签 M_ODD: TEST BX, 0001b ; 检查N的最低位,判断奇偶性 JZ N_EVEN ; 如果N为偶数,跳转到N_EVEN标签 ; M为奇数,N为奇数 SUB AX, 1 ; M减1 SUB BX, 1 ; N减1 JMP STORE ; 跳转到STORE标签 N_EVEN: ; M为偶数,N为奇数 JMP STORE ; 跳转到STORE标签 STORE: MOV M, AX ; 存储M的值 MOV N, BX ; 存储N的值 ; 在此处可以进行进一步操作或跳转到其他代码段 EXIT: ; 程序结束,可以添加进一步操作 CODE ENDS END START 在内存BUFF区域中存放若干数据(个数不确定),统计负数的个数放入MEM单元中 DATA SEGMENT BUFF DB -5, 10, -20, 15, -8, 0, 25, -12 ; 存放数据的内存区域 SIZE equ $ - BUFF ; 数据的总大小 MEM DW ? ; 存放负数个数的变量 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX ; 设置数据段寄存器 MOV CX, SIZE ; 数据的总大小 MOV BX, 0 ; 负数计数器初始化为0 LEA SI, BUFF ; 将数据的起始地址加载到SI寄存器 LOOP_START: MOV AL, [SI] ; 加载当前数据到AL寄存器 CMP AL, 0 ; 判断是否为负数 JL INCREMENT_COUNTER ; 如果小于0,跳转到INCREMENT_COUNTER标签 INC SI ; 指向下一个数据 LOOP LOOP_START ; 继续循环 INCREMENT_COUNTER: INC BX ; 增加负数计数器 INC SI ; 指向下一个数据 LOOP LOOP_START ; 继续循环 MOV AX, BX ; 将负数计数器的值存储到AX寄存器 MOV [MEM], AX ; 将负数个数存储到MEM单元 MOV AX, 4C00H ; 程序退出 INT 21H CODE ENDS END START 设计一个微机系统,当开关K1K2分别组合为00、01、10、11时,8个LED 对应出现依次循环亮、4亮4灭、间隔亮和全灭的4种状态。画出系统电路逻辑图,写出程序 +-----+ +-----+ +-----+ K1 ---| |-----| |-------------| | | | | | | | K2 ---| OR |-----| AND |---+ | | +-----+ +-----+ | +-----+ +-----+ | | | | | |---+ | XOR | +-----+ | LED ------------------+ DATA SEGMENT K1K2 DW 0 ; 存储开关状态 LED DB 0 ; 存储LED状态 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX ; 设置数据段寄存器 LOOP_START: MOV AX, K1K2 ; 读取开关状态到AX寄存器 CMP AX, 0000b ; 检查开关状态 JE ALL_LED_OFF ; 如果开关状态为00,跳转到ALL_LED_OFF标签 CMP AX, 0100b ; 检查开关状态 JE ALL_LED_ON ; 如果开关状态为01,跳转到ALL_LED_ON标签 CMP AX, 1000b ; 检查开关状态 JE ALTERNATE_BLINK ; 如果开关状态为10,跳转到ALTERNATE_BLINK标签 CMP AX, 1100b ; 检查开关状态 JE HALF_BLINK ; 如果开关状态为11,跳转到HALF_BLINK标签 JMP LOOP_START ; 如果开关状态不匹配,则回到循环起始继续检查 ALL_LED_OFF: MOV LED, 00000000b ; 将LED状态设置为全灭 JMP LOOP_START ; 回到循环起始继续检查 ALL_LED_ON: MOV LED, 11111111b ; 将LED状态设置为全亮 JMP LOOP_START ; 回到循环起始继续检查 ALTERNATE_BLINK: MOV LED, 10101010b ; 将LED状态设置为间隔亮 JMP LOOP_START ; 回到循环起始继续检查 HALF_BLINK: MOV LED, 11110000b ; 将LED状态设置为4亮4灭 JMP LOOP_START ; 回到循环起始继续检查 CODE ENDS END START 某微机系统8253的地址是40-43H,计数器0的输入CLK0频率为1MHz,设计实现1s 定时输出。画出系统电路逻辑图,写出程序 +-----------+ +----- | | RST ----------> | 8253 | | | | CLK0 -------> LED (输出) | +-----------+ | | CLK (1MHz) ------|< | | DATA SEGMENT PORT_8253 EQU 40H ; 8253的端口地址 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX ; 设置数据段寄存器 ; 初始化8253计数器0 ; 将控制字写入8253端口 MOV DX, PORT_8253 ; 将8253端口地址加载到DX寄存器 MOV AL, 00110110b ; 设置控制字,选择工作模式为1(16位定时器),计数器0,加载最低字节和最高字节 OUT DX, AL ; 将控制字写入8253端口 ; 设置计数值 MOV DX, PORT_8253 ; 将8253端口地址加载到DX寄存器 MOV AL, 10101100b ; 将计数值的最低字节(约1.048ms)写入AL寄存器 OUT DX, AL ; 将最低字节写入8253端口 MOV AL, 11010111b ; 将计数值的最高字节(约1秒)写入AL寄存器 OUT DX, AL ; 将最高字节写入8253端口 LOOP: ; 等待8253计数完成 MOV DX, PORT_8253 ; 将8253端口地址加载到DX寄存器 IN AL, DX ; 从8253端口读取状态字 TEST AL, 00000010b ; 检查状态字的第2位,判断是否计数完成 JNZ LOOP ; 如果计数未完成,跳转回循环 ; 计数完成,输出操作 MOV DX, PORT_8253 ; 将8253端口地址加载到DX寄存器 MOV AL, 10000000b ; 将输出电平置高 OUT DX, AL ; 输出高电平 ; 延时 MOV CX, 100 ; 设置一个延时计数器 DELAY: LOOP DELAY ; 延时 ; 输出操作完成,将输出电平置低 MOV DX, PORT_8253 ; 将8253端口地址加载到DX寄存器 MOV AL, 00000000b ; 将输出电平置低 OUT DX, AL ; 输出低电平 JMP LOOP ; 回到循环起始,重新开始定时 CODE ENDS END START


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有