用完整汇编语言编写程序,程序要求如下:把S_Data为首地址的100个字节数,第1个
1个回答
关注
展开全部
字节加1,第2个字节加2,第3个字节加3,以此类推,最后把结果存回原地址。
咨询记录 · 回答于2023-06-11
用完整汇编语言编写程序,程序要求如下:把S_Data为首地址的100个字节数,第1个
用完整汇编语言编写程序,程序要求如下:把S_Data为首地址的100个字节数,第1个数乘2加第2个数的值存储到以DData为首地址的50个数的第1个数保存,S_Data第3个数乘2加第4个数的值存储到以D_Data为首地址的50个数的第2个数保存,以此类推。(要求有详细注释及流程图)。
字节加1,第2个字节加2,第3个字节加3,以此类推,最后把结果存回原地址。
section .dataS_Data db 100 dup(0)section .textglobal _start_start: mov ecx, 100 ; 循环计数器 mov esi, S_Data ; esi指向S_Data的首地址loop_start: mov al, byte [esi] ; 取出当前字节的值 add al, cl ; 加上循环计数器的值 mov byte [esi], al ; 存回原地址 inc esi ; 指向下一个字节 dec ecx ; 循环计数器减1 jnz loop_start ; 如果循环计数器不为0,继续循环 ; 程序结束 mov eax, 1 ; 系统调用号1表示退出程序 xor ebx, ebx ; 返回值为0 int 0x80 ; 调用系统中断
5、用存储器 SRAM6264芯片构成32KB内存储器与CPU系统连接,起始地址为:D4000H,要求存储空间地址连续,设计出存储器与系统连接图(须有详细设计过程)。
6、应用所学内容,设计一个家庭防盗报警系统,要求如下:设8个防盗开关,2个红色报警灯,2个报警喇叭。使用74LS244作为输入接口,端口地址98F5H,74LS273作为输出接口,端口地址 98F6H。任意触碰1个防盗开关,1个报警灯亮开始报警。触碰任意2个防盗开关,1个报警灯亮及1个报警喇叭响。触碰任意2个以上防盗开关,2个报警灯亮及2个报警喇叭响,并在屏幕显示报警信息,并指明共几路报警。按以上要求设计出相应系统连接图、编写出相应控制程序。须有详细设计过程、流程图及相应注释
注释如下:; 程序功能:将S_Data中的100个字节按照规定的方式处理后存储到D_Data中; S_Data:100个字节的源数据,D_Data:50个字节的目标数据; 每次处理两个数,将第一个数乘2加上第二个数的值存储到D_Data中; 程序流程:循环50次,每次处理两个数,将结果存储到D_Data中; 注意:本程序未做越界检查,使用时需保证S_Data和D_Data的地址范围正确section .dataS_Data: db 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100D_Data: times 50 db 0 ; 初始化D_Data为50个0section .textglobal _start_start: mov ecx, 50 ; 循环50次 mov esi, S_Data ; S_Data为源数据的首地址 mov edi, D_Data ; D_Data为目标数据的首地址 xor eax, eax ; 清零eax寄存器,用于存储计算结果loop_start: ; 处理第一个数 mov al, [esi] ; 取出第一个数 add esi, 1 ; 指向下一个数 shl ax, 1 ; 将第一个数乘2 ; 处理第二个数 add al, [esi] ; 将第二个数加到ax寄存器中
add esi, 1 ; 指向下一个数 ; 存储结果到D_Data中 mov [edi], ax ; 将计算结果存储到D_Data中 add edi, 1 ; 指向下一个位置 loop loop_start ; 循环 ; 程序结束 mov eax, 1 ; 系统调用号1表示退出程序 xor ebx, ebx ; 返回值为0 int 0x80 ; 调用系统中断
首先,32KB内存需要16个SRAM6264芯片,每个芯片容量为2KB,因此需要将它们连接成一个16位宽的数据总线。同时,由于起始地址为D4000H,需要使用地址译码器将CPU的地址线A15-A14译码为4个片选信号,用于选择不同的SRAM芯片。具体连接方式如下:将16个SRAM芯片的地址线A0-A10连接在一起,作为存储器的地址线A0-A10。将16个SRAM芯片的数据线D0-D7连接在一起,作为存储器的数据总线D0-D15。将16个SRAM芯片的片选信号CE1连接在一起,作为存储器的片选信号。将CPU的地址线A14-A15连接到一个4-16译码器的输入端,将译码器的输出端连接到16个SRAM芯片的片选信号CE2。将CPU的地址线A0-A13连接到16个SRAM芯片的地址线A0-A13。将CPU的读写控制信号RD和WR连接到16个SRAM芯片的读写控制信号RD和WR。将CPU的时钟信号CLK连接到16个SRAM芯片的时钟信号CLK。
连接图如下:image-20211013154220108其中,译码器的真值表如下:A15 A14 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 Y11 Y12 Y130 0 1 0 0 0 0 0 0 0 0 0 0 0 0 00 1 0 1 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 1 0 0 0 0 0 0 0 0 0 0 01 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0其中,Y0-Y15分别对应16个SRAM芯片的片选信号CE2。
有图吗
6.设计过程:确定硬件连接方式:将8个防盗开关连接到输入接口74LS244的8个输入端口上,将2个红色报警灯和2个报警喇叭连接到输出接口74LS273的4个输出端口上。确定输入输出端口地址:根据题目要求,输入接口的端口地址为98F5H,输出接口的端口地址为98F6H。确定输入输出信号:输入信号为8个防盗开关的状态,输出信号为2个红色报警灯和2个报警喇叭的状态。确定触发条件:任意触碰1个防盗开关,1个报警灯亮开始报警;触碰任意2个防盗开关,1个报警灯亮及1个报警喇叭响;触碰任意2个以上防盗开关,2个报警灯亮及2个报警喇叭响,并在屏幕显示报警信息,并指明共几路报警。
亲亲很抱歉,我无法发送图片。
确定控制程序流程:(1)初始化输入输出端口;(2)循环读取8个防盗开关的状态;(3)根据触发条件判断是否报警,并控制相应的输出端口;(4)如果触发了报警,显示报警信息并指明共几路报警;(5)等待一段时间后清除报警状态,回到第二步。编写控制程序:程序如下:
ORG 100HMOV AL, 0FFH ; 初始化输入输出端口OUT 98F5H, ALOUT 98F6H, ALMAIN: MOV AH, 0 ; 循环读取8个防盗开关的状态 IN AL, 98F5H AND AL, 0FFH CMP AL, 0FFH JE MAIN MOV BL, 0 ; 统计触发的防盗开关数量 MOV CL, 1 MOV DL, 0 MOV DH, 0 MOV AH, 0 ; 判断是否触发报警条件 LOOP1: TEST AL, CL JZ NEXT1 INC BL CMP BL, 2 JE TRIGGER1 CMP BL, 3 JE TRIGGER2 CMP BL, 4 JE TRIGGER3 CMP BL, 5 JE TRIGGER4 CMP BL, 6
CMP BL, 7 JE TRIGGER6 CMP BL, 8 JE TRIGGER7 NEXT1: SHL CL, 1 INC AH CMP AH, 8 JNE LOOP1 ; 控制输出端口 TRIGGER1: MOV DL, 1 JMP OUTPUT TRIGGER2: MOV DL, 3 MOV DH, 1 JMP OUTPUT TRIGGER3: MOV DL, 5 MOV DH, 2 JMP OUTPUT TRIGGER4: MOV DL, 9 MOV DH, 3 JMP OUTPUT
TRIGGER5: MOV DL, 17 MOV DH, 4 JMP OUTPUT TRIGGER6: MOV DL, 33 MOV DH, 5 JMP OUTPUT TRIGGER7: MOV DL, 65 MOV DH, 6 ; 显示报警信息 OUTPUT: OUT 98F6H, DL MOV AL, DH OUT 98F6H, AL CALL DELAY MOV AL, 0 OUT 98F6H, AL OUT 98F6H, AL JMP MAINDELAY: MOV CX, 0FFFFH LOOP2:
DEC CX JNZ LOOP2 RETEND
注释:第1行:程序入口地址为100H。第3-4行:初始化输入输出端口,将所有端口的状态都设置为高电平。第6-7行:进入主循环。第9-13行:读取8个防盗开关的状态,如果都是高电平则继续循环。第15-16行:初始化计数器和输出状态。第18-31行:根据触发条件判断是否报警,并控制相应的输出端口。第33-38行:显示报警信息并指明共几路报警。第40-43行:等待一段时间后清除报警状态,回到主循环。第45-50行:延时函数,用于等待一段时间。第52行:程序结束。
亲亲很抱歉,我无法识别图片,请您文字形式描述给我,我会尽力给你解答。