1234H存到汇编里地址高位是几

时间: 2023-05-27 19:02:26 浏览: 265
这道题需要注意两点: 1. 在汇编中,地址是以十六进制表示的。 2. 存储器的存储方式是小端存储方式。 在小端存储方式下,一个多字节的数据在存储器中的存放顺序是按照地址递增的方向,每个字节一个字节地存储的。存储时,先存储低字节,再存储高字节。 因此,1234H 在存储器中的存放顺序是 34H 12H。地址高位是指存储器地址的高字节。 假设 1234H 存储在地址为 0000H 的单元中,则它的低字节存储在 0000H,高字节存储在 0001H。因为高字节是 12H,所以地址高位是 0001H。
相关问题

汇编语言循环程序设计能够从键盘接受10个输入数据,并按从大到小的顺序排列后显示出来

好的,我来为您详细解答一下。 首先,我们需要使用汇编语言编写一个循环程序,实现从键盘接受10个输入数据并存储到内存中。 下面是一个简单的示例代码: ```asm mov bx, 0 ; 初始化计数器 mov cx, 10 ; 设置循环次数 input_loop: mov ah, 01h ; 设置输入功能号 int 21h ; 调用DOS中断21h,等待输入 sub al, 30h ; 将输入字符转换为数字 mov ah, 0 ; 清空高位 mov [input+bx], al ; 存储到内存中 inc bx ; 计数器加1 loop input_loop ; 循环输入 input: times 10 db 0 ; 申请10个字节的内存,用于存储输入数据 ``` 接下来,我们需要编写排序算法,将输入的数据按从大到小的顺序排列。 这里使用冒泡排序算法,代码如下: ```asm mov bx, 0 ; 初始化计数器 mov cx, 9 ; 设置循环次数,因为每次比较会减少一个数的比较 outer_loop: mov si, 0 ; 初始化si为0,用于内层循环的计数器 inner_loop: mov al, [input+si] ; 取出当前位置的值 cmp al, [input+si+1] ; 比较当前值和下一个值的大小 jle skip_swap ; 如果当前值比下一个值大,跳过交换 xchg al, [input+si+1] ; 交换当前值和下一个值 mov [input+si], al ; 存回当前位置 skip_swap: inc si ; 计数器加1 cmp si, cx ; 判断是否到达循环上限 jle inner_loop ; 如果未到达,继续内层循环 dec cx ; 每次外层循环结束,循环次数减少1 cmp cx, 0 ; 如果循环次数为0,跳出循环 jne outer_loop ``` 最后,我们将排好序的数据输出到屏幕上,代码如下: ```asm mov bx, 0 ; 初始化计数器 mov cx, 10 ; 设置循环次数 output_loop: mov al, [input+bx] ; 取出当前位置的值 add al, 30h ; 将数字转换为字符 mov ah, 02h ; 设置输出功能号 int 21h ; 调用DOS中断21h,输出字符 inc bx ; 计数器加1 loop output_loop ; 循环输出 mov ah, 4Ch ; 设置功能号,用于程序结束 int 21h ; 调用DOS中断21h,程序结束 ``` 完整代码如下: ```asm .model small .stack 100h .data input: times 10 db 0 ; 申请10个字节的内存,用于存储输入数据 .code mov bx, 0 ; 初始化计数器 mov cx, 10 ; 设置循环次数 input_loop: mov ah, 01h ; 设置输入功能号 int 21h ; 调用DOS中断21h,等待输入 sub al, 30h ; 将输入字符转换为数字 mov ah, 0 ; 清空高位 mov [input+bx], al ; 存储到内存中 inc bx ; 计数器加1 loop input_loop ; 循环输入 mov bx, 0 ; 初始化计数器 mov cx, 9 ; 设置循环次数,因为每次比较会减少一个数的比较 outer_loop: mov si, 0 ; 初始化si为0,用于内层循环的计数器 inner_loop: mov al, [input+si] ; 取出当前位置的值 cmp al, [input+si+1] ; 比较当前值和下一个值的大小 jle skip_swap ; 如果当前值比下一个值大,跳过交换 xchg al, [input+si+1] ; 交换当前值和下一个值 mov [input+si], al ; 存回当前位置 skip_swap: inc si ; 计数器加1 cmp si, cx ; 判断是否到达循环上限 jle inner_loop ; 如果未到达,继续内层循环 dec cx ; 每次外层循环结束,循环次数减少1 cmp cx, 0 ; 如果循环次数为0,跳出循环 jne outer_loop mov bx, 0 ; 初始化计数器 mov cx, 10 ; 设置循环次数 output_loop: mov al, [input+bx] ; 取出当前位置的值 add al, 30h ; 将数字转换为字符 mov ah, 02h ; 设置输出功能号 int 21h ; 调用DOS中断21h,输出字符 inc bx ; 计数器加1 loop output_loop ; 循环输出 mov ah, 4Ch ; 设置功能号,用于程序结束 int 21h ; 调用DOS中断21h,程序结束 end ``` 希望能够对您有所帮助!

帮我修改以下代码,使它的功能不变但是代码不同CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H ENDM DATAS SEGMENT MES1 DB 'Please input number N','$' MES2 DB 'The result is: $' BUF DW 256 DUP (0) LEN DW 1 CY DW ? DATAS ENDS STACKS SEGMENT DW 32 DUP(?) STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV AH,9 ;显示提示 LEA DX,MES1 INT 21H CRLF CALL GETNUM ;DX中存放读到的键盘输入值 MOV BP,DX ;N值送BP CMP BP,0 JZ L4 ;BP=0跳转 CMP BP,1 JZ L4 LEA SI,BUF ;SI指向BUF首址 MOV [SI],DX ;缓冲区初始化值为键盘输入N D1: DEC BP ;BP-1=1跳转 CMP BP,1 JZ L5 XOR BX,BX ;BX清0,每次相乘从最低位开始 MOV WORD PTR CY,0 ;同时CY每次要清零 MOV CX,LEN ;CX送循环,判断占了多少个子单元,循环多少次 D2: MOV AX,[SI+BX] MUL BP ADD AX,CY ;加低位进位 JNC D3 ;结果无进位跳转 INC DX ;有进位,积高位加进位 D3: MOV [SI+BX],AX ;存低位 MOV CY,DX ;高位保存在CY,乘高位单元时加上 INC BX INC BX ;一个字长度 LOOP D2 CMP DX,0 ;判断DX两次运算后是否为0 JZ D1 ;DX高位为0跳D1 INC WORD PTR LEN ;DX高位不为0则长度加1,DX送下一个单元 MOV [SI+BX],DX JMP D1 L4: MOV SI,OFFSET BUF ;BUF存1 MOV WORD PTR [SI],1 L5: MOV AH,09H ;显示MES2单元内容 MOV DX,OFFSET MES2 INT 21H MOV CX,LEN MOV BX,CX ;BX=BUF长度 DEC BX ;BX-1 SHL BX,1 L6: MOV AX,[SI+BX] CALL DISPLAY1 ;从高位显示结果 DEC BX DEC BX LOOP L6 MOV AH,4CH INT 21H GETNUM PROC NEAR XOR DX,DX L1: MOV AH,1 INT 21H CMP AL,0DH JZ L2 CMP AL,40H JL L3 ;小于跳转 SUB AL,07H L3: SUB AL,30H MOV CL,04H SHL DX,CL XOR AH,AH ADD DX,AX JMP L1 L2: PUSH DX CRLF POP DX RET GETNUM ENDP DISPLAY1 PROC NEAR PUSH BX PUSH CX PUSH DX PUSH AX MOV AL,AH CALL DISPLAY2 POP AX CALL DISPLAY2 POP DX POP CX POP BX RET DISPLAY1 ENDP DISPLAY2 PROC NEAR ;显示字符(AL) MOV BL,AL MOV DL,BL ;执行MOV AH,02,AX=0200 MOV CL,04 ;执行CALL调用,AL=30H SHR DL,CL CALL DISPLAY3 ;显示高位 MOV DL,BL AND DL,0FH CALL DISPLAY3 ;显示低位 RET DISPLAY2 ENDP DISPLAY3 PROC NEAR ;显示一位(DL=0XH) ADD DL,30H CMP DL,3AH JB A1 ADD DL,07H A1: MOV AH,02H INT 21H RET DISPLAY3 ENDP CODES ENDS END START

以下是修改后的代码,使用了更加规范的汇编语言书写方式,并且添加了注释,但是其功能和原代码相同。请注意,我不知道你的具体要求,所以可能会与你的要求略有不同,但是应该不会影响程序的正常运行。 ``` ; 定义宏,用于实现输出换行的操作 CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H ENDM ; 定义数据段 DATAS SEGMENT MES1 DB 'Please input number N', 13, 10, '$' ; 提示用户输入N的消息 MES2 DB 'The result is: $' ; 显示结果的消息 BUF DW 256 DUP (0) ; 存放计算结果的缓冲区 LEN DW 1 ; 缓冲区当前长度 CY DW ? ; 存放高位进位的变量 DATAS ENDS ; 定义堆栈段 STACKS SEGMENT DW 32 DUP(?) ; 定义32个字的堆栈空间 STACKS ENDS ; 定义代码段 CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ; 提示用户输入N MOV AH,9 LEA DX,MES1 INT 21H ; 读取用户输入的N CALL GETNUM MOV BP,DX ; 将N值送入BP CMP BP,0 ; 判断BP是否为0 JZ L4 ; 如果BP为0则跳转到L4 CMP BP,1 ; 判断BP是否为1 JZ L4 ; 如果BP为1则跳转到L4 ; 将N存入BUF中 LEA SI,BUF MOV [SI],DX ; 计算结果 D1: DEC BP ; BP减1 CMP BP,1 ; 判断BP是否为1 JZ L5 ; 如果BP为1则跳转到L5 XOR BX,BX ; BX清0,每次相乘从最低位开始 MOV WORD PTR CY,0 ; 同时CY每次要清零 MOV CX,LEN ; CX送循环,判断占了多少个子单元,循环多少次 D2: MOV AX,[SI+BX] ; 将BUF中的对应位赋值给AX MUL BP ; 将AX乘以BP ADD AX,CY ; 加上高位进位 JNC D3 ; 如果结果无进位则跳转到D3 INC DX ; 有进位,积高位加进位 D3: MOV [SI+BX],AX ; 将结果存入BUF中 MOV CY,DX ; 将进位保存在CY中,乘高位单元时加上 INC BX INC BX ; 由于BUF中每个数据占2个字节,所以需要增加2个单位长度 LOOP D2 ; 循环 CMP DX,0 ; 判断DX两次运算后是否为0 JZ D1 ; 如果DX高位为0则跳转到D1 INC WORD PTR LEN ; 如果DX高位不为0则长度加1,DX送下一个单元 MOV [SI+BX],DX JMP D1 L4: ; 如果N为0或1,则将结果设为1 MOV SI,OFFSET BUF MOV WORD PTR [SI],1 L5: ; 显示结果 MOV AH,09H LEA DX,MES2 INT 21H MOV CX,LEN MOV BX,CX DEC BX SHL BX,1 L6: MOV AX,[SI+BX] CALL DISPLAY1 DEC BX DEC BX LOOP L6 ; 程序结束 MOV AH,4CH INT 21H ; 读取用户输入的数字 GETNUM PROC NEAR XOR DX,DX L1: MOV AH,1 INT 21H CMP AL,0DH ; 如果读到回车符,则停止读取 JZ L2 CMP AL,40H ; 如果读取到@字符,则跳过 JL L3 SUB AL,07H L3: SUB AL,30H ; 将字符转换为数字 MOV CL,04H SHL DX,CL ; 将DX左移4位 XOR AH,AH ADD DX,AX ; 将AX的值加入DX中 JMP L1 L2: PUSH DX CRLF ; 输出换行 POP DX RET GETNUM ENDP ; 显示单个数字 DISPLAY1 PROC NEAR PUSH BX PUSH CX PUSH DX PUSH AX MOV AL,AH CALL DISPLAY2 POP AX CALL DISPLAY2 POP DX POP CX POP BX RET DISPLAY1 ENDP ; 显示字符 DISPLAY2 PROC NEAR ; 将字符转换为ASCII码 MOV BL,AL MOV DL,BL SHR DL,4 CALL DISPLAY3 ; 显示高位 MOV DL,BL AND DL,0FH CALL DISPLAY3 ; 显示低位 RET DISPLAY2 ENDP ; 显示单个数字 DISPLAY3 PROC NEAR ADD DL,30H CMP DL,3AH JB A1 ADD DL,07H A1: MOV AH,02H INT 21H RET DISPLAY3 ENDP CODES ENDS END START ```

相关推荐

最新推荐

recommend-type

aarch64 完整汇编指令集

aarch64 完整汇编指令集,包括基础指令, SIMD, SVE, SME 指令共1650 多条
recommend-type

常用ARM指令集及汇编.pdf

ARM7TDMI(-S)指令集及汇编1 ARM 处理器寻址方式2 寄存器寻址2 立即寻址2 寄存器偏移寻址2 寄存器间接寻址3 基址寻址3 多寄存器寻址4 堆栈寻址4 块拷贝寻址5 相对寻址5 指令集介绍7 ARM 指令集7 指令...
recommend-type

在 Visual Studio 中查看反汇编代码

主要介绍了在 Visual Studio 中查看反汇编代码的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

电子科技大学汇编实验报告总结.doc

电子科技大学汇编实验报告总结.doc
recommend-type

MCS-51单片机汇编指令详解

本指令是要在ROM的一个地址单元中找出数据,显然必须知道这个单元的地址,这个单元的地址是这样确定的:在执行本指令立脚点DPTR中有一个数,A中有一个数,执行指令时,将A和DPTR中的数加起为,就成为要查找的单元的...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB取整函数与Web开发的作用:round、fix、floor、ceil在Web开发中的应用

![MATLAB取整函数与Web开发的作用:round、fix、floor、ceil在Web开发中的应用](https://img-blog.csdnimg.cn/2020050917173284.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2thbmdqaWVsZWFybmluZw==,size_16,color_FFFFFF,t_70) # 1. MATLAB取整函数概述** MATLAB取整函数是一组强大的工具,用于对数值进行
recommend-type

我想做python的算法工程师,我应该学什么?学习的顺序是什么?网上有什么推荐的免费课程吗?回答具体精确一点不要太笼统

对于想要成为 Python 算法工程师的人来说,他们应该先从掌握 Python 的基础语法开始,然后学习数据结构和算法,并且要深入了解 Python 中的一些科学计算和数据处理库,比如 NumPy、Pandas 等。 学习的顺序可以是先学习基础语法和编程技巧,然后再学习数据结构和算法相关的知识,最后深入了解数据处理和科学计算相关的库。 对于免费课程的推荐,我建议你可以先去 Coursera、edX、Udacity 等网站上寻找相关课程,这些网站上有很多优质的 Python 编程和算法课程,你可以根据自己的需求和学习进度进行选择。此外,还可以考虑一些在线编程网站,如 HackerRank、L
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。